首页
学习
活动
专区
圈层
工具
发布

HQL问题
EN

Stack Overflow用户
提问于 2009-07-19 13:25:08
回答 1查看 1.2K关注 0票数 2

嗨,每个人我都有这些课

代码语言:javascript
复制
@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

代码语言:javascript
复制
@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;

当我使用这个查询时:

代码语言:javascript
复制
executeQuery("select l from Login as l inner join l.branch as b where l.branch.bname = ?", username)

或者这样:

代码语言:javascript
复制
executeQuery("select b.login from Branch b where b.username = ?", username)

我得到了这个错误:

代码语言:javascript
复制
org.hibernate.QueryException: could not resolve property: bname of: Data.Entity.Branch

但是当使用下面的代码时:

代码语言:javascript
复制
executeQuery("select b.login from Branch b where b.id = ?", username)
it's return correct result

我的意思是这种类型的HQL只适用于主键?还是我的映射有问题?有没有方法可以使用其他字段(主键除外)形成可拼接表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-19 13:28:33

Hibernate希望您使用属性名而不是数据库列名,例如bnamebranchName insted和userName而不是username

因此,如果您将查询更改为

代码语言:javascript
复制
executeQuery("select l from Login as l inner join l.branch as b " +
     "where l.branch.branchName  = ?",
     username);

代码语言:javascript
复制
executeQuery("select b.login from Branch b where b.userName = ?", username);

,一切都应该按预期工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1149897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档