gpt4 book ai didi

java - 使用 ElementCollection 连接的 Hibernate 查询不起作用

转载 作者:行者123 更新时间:2023-11-30 09:05:49 25 4
gpt4 key购买 nike

我正在尝试进行 Hibernate 查询(基于 Hibernate 的 JPA)。考虑一个非常简单的实体模型:一个名为 DocumentedObject 的实体,它具有 UserHistoryObjectElementCollection(名为 personInChargeHistory)。我想通过 HQL 找到在其历史记录中有一些特殊 UserDocumentedObjects。尝试查询:

select d from DocumentedObject as d join d.personInChargeHistory as ph where ph.value.id=:some_userid

结果是:

Caused by: org.hibernate.QueryException: could not resolve property: value.id of: DocumentedObject [select distinct d from DocumentedObject as d join d.personInChargeHistory as ph  where ph.value.id=2 ]

我能想到的唯一问题是 UsrHistoryObject 是可嵌入的。但如果这是问题,我应该如何进行这样的查询?这是我的实体:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class DocumentedObject {

private Long id;
private List<UserHistoryObject> personInChargeHistory = new LinkedList<UserHistoryObject>();

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

@ElementCollection
@OrderBy("date desc")
public List<UserHistoryObject> getPersonInChargeHistory() {
return personInChargeHistory;
}

public void setPersonInChargeHistory(List<UserHistoryObject> personInChargeHistory) {
this.personInChargeHistory = personInChargeHistory;
}

}

@Embeddable
public class UserHistoryObject {

private Date date;
private User value;

public UserHistoryObject() {
}

public UserHistoryObject(Date date, User value) {
this.date = date;
this.value = value;
}

@Temporal(TemporalType.TIMESTAMP)
public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

@ManyToOne
public User getValue() {
return value;
}

public void setValue(User value) {
this.value = value;
}
}

@Entity
public class User {

private Long id;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}
}

最佳答案

看起来在 JPA 中有点忽略了通过 Embeddables 的元素集合进行查询。我检查了规范,没有明确说明支持它们的路径表达式。

我搜索了 Hibernate 错误数据库,没有发现与您的具体问题相关的错误报告。最接近的暗示可嵌入元素集合问题的是这个: https://hibernate.atlassian.net/browse/HHH-8926

有了 Eclipselink,情况看起来好一些,因为 EclipseLink 从 2.4.0 版本开始支持这种类型的查询。

关于java - 使用 ElementCollection 连接的 Hibernate 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24711716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com