-
FEATURED COMPONENTS
First time here? Check out the FAQ!
i've got three tables user, menuuser, userprivilege
userprivilege had 2 foreign key reference
userid (table user)
menuid(table menuuser)
ive got error like this when login to my application:
SEVERE: >>org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User where userid like '%admin%'] >> at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181) >> at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110) >> at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93) >> at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:277) >> at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056) >>...
sorry for my stupid question,, anyone can tell me why?? and how to fix this..
thanks
this is my hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory name=""> <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <mapping class="com.cb.crudcb.domain.Crud"/> <mapping class="com.cb.crudcb.domain.Divisi"/> <mapping class="com.cb.crudcb.domain.Menu"/> <mapping class="com.cb.crudcb.domain.Menuuser"/> <mapping class="com.cb.crudcb.domain.User"/> <mapping class="com.cb.crudcb.domain.Userprivilege"/> </session-factory> </hibernate-configuration>
user java
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.cb.crudcb.domain; import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import org.hibernate.annotations.Entity; @SuppressWarnings("serial") @Entity @Table(name = "user", catalog = "test", schema = "") public class User implements Serializable { @Id @Basic(optional = false) @Column(name = "userid",nullable= false, length = 10) private String userid; @Column(name = "password", length = 20) private String password; @Column(name = "age", length = 3) private int age; @Column(name = "phone", length = 15) private int phone; @Column(name = "weight", length = 3) private int weight; @Column(name = "birthday", length = 20) @Temporal(javax.persistence.TemporalType.DATE) private Date birthday ; @Column(name = "email", length = 50) private String email; @Column(name = "memo", length = 200) private String memo; @Column(name = "status", length = 1) private String status; @OneToMany(cascade = CascadeType.ALL, mappedBy = "user") private Set<Userprivilege> userp = new HashSet<Userprivilege>(); public User(){ } public User(String userid) { this.userid = userid; } public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getPhone() { return phone; } public void setPhone(int phone) { this.phone = phone; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getMemo() { return memo; } public void setMemo(String memo) { this.memo = memo; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Set<Userprivilege> getUserprivilege() { return userp; } public void setUserprivilege(Set<Userprivilege> userp) { this.userp = userp; } public void addUserprivilege(Userprivilege userprivilege) { this.userp.add(userprivilege); } @Override public int hashCode() { int hash = 0; hash += (userid != null ? userid.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof User)) { return false; } User other = (User) object; if ((this.userid == null && other.userid != null) || (this.userid != null && !this.userid.equals(other.userid))) { return false; } return true; } @Override public String toString() { return "com.cb.crudcb.domain.User[id=" + userid + "]"; } }
menuuser java
package com.cb.crudcb.domain; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.Entity; @SuppressWarnings("serial") @Entity @Table(name="menuuser", catalog = "test", schema = "") public class Menuuser implements Serializable { @Id @Basic(optional = false) @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "menuid", nullable = false, length = 10) private int menuid; @Column(name="namamenu", length = 100) private String namamenu; @OneToMany(cascade = CascadeType.ALL, mappedBy = "menuuser") private Set<Userprivilege> userp = new HashSet<Userprivilege>(); public Menuuser(){ } public Menuuser(int menuid) { this.menuid = menuid; } public int getMenuid() { return menuid; } public void setMenuid(int menuid) { this.menuid = menuid; } public String getNamamenu(){ return namamenu; } public void setNamamenu(String namamenu){ this.namamenu = namamenu; } public Set<Userprivilege> getUserprivilege() { return userp; } public void setUserprivilege(Set<Userprivilege> userp) { this.userp = userp; } public void addUserprivilege(Userprivilege userprivilege) { this.userp.add(userprivilege); } }
user privilege java
package com.cb.crudcb.domain; import java.io.Serializable; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import org.hibernate.annotations.Entity; @SuppressWarnings("serial") @Entity //@Inheritance(strategy=InheritanceType.JOINED) //@Table(name="userprivilege", catalog = "test", schema = "") //@AssociationOverride(name = "pk.user", joinColumns = @JoinColumn(name = "userid")) //@AssociationOverride(name = "pk.menuuser", joinColumns = @JoinColumn(name = "menuid")) public class Userprivilege implements Serializable{ @Id @Basic(optional = false) @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id",nullable= false, length = 10) private int id; @ManyToOne @JoinColumn(name = "user") private User userid; @ManyToOne @JoinColumn(name = "menuuser") private Menuuser menuid; @Column(name = "c", length = 1) private String c; @Column(name = "r", length = 1) private String r; @Column(name = "u", length = 1) private String u; @Column(name = "d", length = 1) private String d; @Column(name = "a", length = 1) private String a; public Userprivilege(){ } public Userprivilege(int id) { this.id = id; } public int getId() { return id; } public void setId(int id) { this.id = id; } public User getUserid(){ return userid; } public void setUserid(User userid){ this.userid = userid; } public Menuuser getMenuid(){ return menuid; } public void setMenuid(Menuuser menuid){ this.menuid = menuid; } public String getC(){ return c; } public void setC(String c){ this.c = c; } public String getR(){ return r; } public void setR(String r){ this.r = r; } public String getU(){ return u; } public void setU(String u){ this.u = u; } public String getD(){ return d; } public void setD(String d){ this.d = d; } public String getA(){ return a; } public void setA(String a){ this.a = a; } }
userDAO
package com.cb.crudcb.dao; import com.cb.crudcb.domain.User; import java.util.List; import org.hibernate.Session; import org.zkoss.zkplus.hibernate.HibernateUtil; public class UserDAO { @SuppressWarnings("unchecked") public List<User> findAll() throws Exception { Session session = HibernateUtil.getSessionFactory().openSession(); return (List<User>) session.createCriteria(User.class).list(); } @SuppressWarnings("unchecked") public List<User> getUserLogin(String userid) throws Exception { Session session = HibernateUtil.getSessionFactory().openSession(); return (List<User>) session.createQuery("from User where userid like '%"+userid+"%'").list(); } }
login java
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.cb.crudcb.log; import java.util.List; import org.zkoss.zhtml.Messagebox; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Textbox; import com.cb.crudcb.domain.User; import com.cb.crudcb.dao.UserDAO; import com.cb.crudcb.web.Encryption; import com.cb.crudcb.web.Session; @SuppressWarnings("serial") public class Login extends GenericForwardComposer{ private UserDAO usr = new UserDAO(); private Session s = new Session(); private Encryption enc = new Encryption(); private Textbox txtUserid, txtPassword; public void onOK$txtPassword() throws Exception{ List<User> cs = usr.getUserLogin(txtUserid.getValue()); if (cs.size() > 0) { for (final User c : cs) { String user = new String(c.getUserid()); String password = new String(enc.decodeAndDecrypt(c.getPassword())); String status = new String(c.getStatus()); if(user.equals(txtUserid.getValue()) && password.equals(txtPassword.getValue()) && status.equals("y")){ s.setSession("userid", txtUserid.getValue()); Executions.sendRedirect("/page/index2.zul"); }else if(user.equals(txtUserid.getValue())&& password.equals(txtPassword.getValue()) && status.equals("n")){ Messagebox.show("Username expired!! Please contact administrator", "Information", Messagebox.OK, Messagebox.INFORMATION); } else { Messagebox.show("Wrong Password or Username", "Information", Messagebox.OK, Messagebox.INFORMATION); System.out.println("Wrong Password!"); } } } else { Messagebox.show("User id doesn't exist or expired", "Information", Messagebox.OK, Messagebox.INFORMATION); System.out.println("KOSONG!"); } } public void onClick$btnLogin() throws Exception{ List<User> cs = usr.getUserLogin(txtUserid.getValue()); if (cs.size() > 0) { for (final User c : cs) { String user = new String(c.getUserid()); String password = new String(enc.decodeAndDecrypt(c.getPassword())); String status = new String(c.getStatus()); if(user.equals(txtUserid.getValue()) && password.equals(txtPassword.getValue()) && status.equals("y")){ s.setSession("userid", txtUserid.getValue()); Executions.sendRedirect("/page/index2.zul"); }else if(user.equals(txtUserid.getValue())&& password.equals(txtPassword.getValue()) && status.equals("n")){ Messagebox.show("Username expired!! Please contact administrator", "Information", Messagebox.OK, Messagebox.INFORMATION); } else { Messagebox.show("Wrong Password or Username", "Information", Messagebox.OK, Messagebox.INFORMATION); System.out.println("Wrong Password!"); } } } else { Messagebox.show("User id doesn't exist or expired", "Information", Messagebox.OK, Messagebox.INFORMATION); System.out.println("KOSONG!"); } } }
For testing have a try with the full qualified name of your Object in the hql statement like this thread.
Can be that hibernate uses internal the word 'user'.
. . . return (List<User>) session.createQuery("from com.cb.crudcb.domain.User where userid like '%"+userid+"%'").list();
best
Stephan
hi Stephan
i changed it with
. . . return (List<User>) session.createQuery("from com.cb.crudcb.domain.User where userid like '%"+userid+"%'").list();
thks stephan
First, let me say that i don't understand why the method getUserLogin() gives back a java.util.list and not a single Object. I hope each user entry in the db is unique.
sample (from my hibernate environment):
@SuppressWarnings("unchecked") @Override public Customer getCustomerByID(long id, long tenantId) { DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class); criteria.add(Restrictions.eq("id", id)); criteria.add(Restrictions.eq("tenantId", tenantId)); return (Customer) DataAccessUtils.uniqueResult(getHibernateTemplate().findByCriteria(criteria)); }
Test your code again (attached a quick dirty code) which results a single object and made the modifications in your onClick method code.
@SuppressWarnings("unchecked") public User getUserLogin(String userid) throws Exception { Session session = HibernateUtil.getSessionFactory().openSession(); List<User>) list = session.createQuery("from User where userid like '%"+userid+"%'").list(); return list.get(0); }
best
Stephan
Asked: 2011-05-11 05:02:00 +0800
Seen: 703 times
Last updated: May 12 '11