嗨,每个人我都有这些课
@Entity
@Table(name = "login", uniqueConstraints={@UniqueConstraint(columnNames={"username_fk"})})
public class Login implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue
private int id;
@Column(name = "password", length = 64)
private String password;
@Column(name = "roles", length = 32)
private String roles;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@OnDelete(action=OnDeleteAction.CASCADE)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@JoinColumn(name = "username_fk", nullable=false)
private Branch branch;
//some getter and sette和
@Entity
@Table(name = "branch", uniqueConstraints = {@UniqueConstraint(columnNames = {"bname", "branch_fk"})})
public class Branch implements Serializable {
@Id
@GeneratedValue
private int id;
@Column(name = "username", length = 64, nullable=false)
private String userName;
@Column(name = "bname", length = 64)
private String branchName;
@Column(name = "officername", length = 64)
private String officerName;
@Column(name = "studcount")
private int studCount;
@Column(name = "blevel", columnDefinition="int default 0")
private int level;
@Column(name = "officeremail", length = 64)
private String officerEmail;
@Column(name = "confirmed", columnDefinition = "tinyint default 0")
private int confirmed;
@OneToOne(mappedBy = "branch", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@OnDelete(action=OnDeleteAction.CASCADE)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Login login;当我使用这个查询时:
executeQuery("select l from Login as l inner join l.branch as b where l.branch.bname = ?", username)或者这样:
executeQuery("select b.login from Branch b where b.username = ?", username)我得到了这个错误:
org.hibernate.QueryException: could not resolve property: bname of: Data.Entity.Branch但是当使用下面的代码时:
executeQuery("select b.login from Branch b where b.id = ?", username)
it's return correct result我的意思是这种类型的HQL只适用于主键?还是我的映射有问题?有没有方法可以使用其他字段(主键除外)形成可拼接表?
发布于 2009-07-19 13:28:33
Hibernate希望您使用属性名而不是数据库列名,例如bname的branchName insted和userName而不是username。
因此,如果您将查询更改为
executeQuery("select l from Login as l inner join l.branch as b " +
"where l.branch.branchName = ?",
username);和
executeQuery("select b.login from Branch b where b.userName = ?", username);,一切都应该按预期工作。
https://stackoverflow.com/questions/1149897
复制相似问题