【发布时间】:2014-10-24 19:52:50
【问题描述】:
当尝试使用CriteriaBuilder 生成动态查询时,Hibernate 没有为与@ElementCollection 关联的实体成员变量创建正确的 SQL。
示例实体:
@Entity
@Table(name = "myclass")
public class MyClass {
...
@ElementCollection
@CollectionTable(
name = "myclass_mysubclass",
joinColumns = @JoinColumn(name = "myclass_id")
)
@Column(name = "mysubclass_id")
private List<Integer> mySubClassIDs;
...
}
CriteriaBuilder 代码:
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(MyClass.class);
Root<T> root = criteriaQuery.from(MyClass.class);
Expression<Object> e = root.get("mySubClassIDs");
List<Object> o = (List<Object>) entry.getValue();
criteriaQuery.where(e.in(o));
entry.getValue() 将返回 [1] 的 ArrayList<Integer>
生产:
SELECT distinct count(myclass0_.id) as col_0_0_
FROM hotel myclass0_
cross join myclass_mysubclass mySubClassids1_
where myclass0_.id=mySubClassids1_.myclass_id and (. in (1))
为什么 Hibernate 不能正确生成“in”子句?这 ”。”应该是 mySubClassids1_.mysubclass_id
我在成员变量的注释中遗漏了什么吗?好像不是这样,因为生成交叉连接就足够了。
环境是 Jboss AS 7,在 jdk-6 上带有 Hibernate 4.2.7.SP1-redhat-3
【问题讨论】:
标签: java mysql hibernate jpa jpa-2.0