【发布时间】:2012-04-09 22:50:48
【问题描述】:
在我的应用程序中,用户可以生成对事物的请求,因此我有两个实体 Request 和 User 映射到同名的基础表。存在多对一关系,因此用户可以提出许多请求。因此,我的请求实体看起来像这样
@实体 @Table(name="请求") 公共类请求实现可序列化{ 私人 int id; 私人用户请求者; @ID @Column(name="ID", unique=true, nullable=false) 公共 int getId() { 返回这个.id; } @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="REQUESTER", nullable=false) 公共用户 getRequester() { 返回 this.requester; } }我需要获取至少提出一个请求的所有用户的列表。
我尝试了以下方法:
公共列表retrieveAllRequesters(){ return hbSession().createQuery("select requester from Request r left join r.requester as requester").list(); }但这会为每个请求返回一个实体
我尝试像这样添加 distinct 关键字:
从 Request r 中选择不同的请求者 left join r.requester as requester但这会导致 HQL 语法错误
我尝试了很多其他方法,将 left 连接更改为 inner 和 outer,但没有成功。
我很感激 HQL 能做我需要做的事情的建议。谢谢。
Bohemian 建议这可能是方言问题,所以我启用了 hibernate.show_sql 并显示以下内容:
休眠: 选择 不同的 user1_.ID 为 ID10_, user1_.EMAIL_ADDRESS 作为 EMAIL2_10_, user1_.EXTERNAL_ID 为 EXTERNAL3_10_, user1_.IS_ADMINISTRATOR 作为 IS4_10_, user1_.IS_SUPERVISOR 为 IS5_10_, user1_.IS_TECHNICIAN 作为 IS6_10_, user1_.LAST_CHECKED_IN_AT 作为 LAST7_10_, user1_.LAST_LOGGED_IN_AT 作为 LAST8_10_, user1_.LAST_UPDATED_AT 作为 LAST9_10_, user1_.NAME 作为 NAME10_, user1_.UI_PREFERENCES 作为 UI11_10_ 从 请求请求0_ 内部联接 [用户] user1_ 在 request0_.REQUESTER=user1_.ID 2255 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL 错误:421,SQLState:S0001 2255 [main] 错误 org.hibernate.util.JDBCExceptionReporter - 文本数据类型无法选择为 DISTINCT,因为它不可比较。数据库是 MS SQL Server。
【问题讨论】:
标签: hibernate hql many-to-one