Java 为什么CriteriaBuilder会为“创建格式错误的查询?”;在;收藏桌?
当尝试使用Java 为什么CriteriaBuilder会为“创建格式错误的查询?”;在;收藏桌?,java,mysql,hibernate,jpa,jpa-2.0,Java,Mysql,Hibernate,Jpa,Jpa 2.0,当尝试使用CriteriaBuilder生成动态查询时,Hibernate没有针对与@ElementCollection关联的实体成员变量创建正确的SQL 样本实体: @Entity @Table(name = "myclass") public class MyClass { ... @ElementCollection @CollectionTable( name = "myclass_mysubclass", joinColu
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;
...
}
为什么Hibernate不能正确地生成“in”子句?“.”应该是mysubclassisdS1.mysubclass\u id
我是否在成员变量的注释中遗漏了什么?似乎不是这样,因为它足以生成交叉联接
env是Jboss AS 7,jdk-6上有Hibernate 4.2.7.SP1-redhat-3
create table myclass (
id int8 not null,
primary key (id)
);
create table myclass_mysubclass (
myclass_id int8 not null,
mysubclass_id int4
);
因此,您似乎需要进行连接而不是获取:
Expression<Object> e = root.join("mySubClassIDs");
表达式e=root.join(“mySubClassIDs”);
无论如何都为我工作。谢谢尼古拉斯!但是,由于各种原因,在这种特殊情况下不能使用join。如上所示,创建了联接,只是“in”的表达式没有创建正确的左手操作数。它只有“.”,没有指定表或列,即使它在创建交叉联接时知道联接表。Nicholas,我听了你的建议,并明确使用了联接。代码看起来有点难看,因为反射将用于确定成员变量的类类型,然后通过if语句来决定构建适当的表达式,但我离题了:)听起来有点像设计问题,但我很高兴您取得了进展。
create table myclass (
id int8 not null,
primary key (id)
);
create table myclass_mysubclass (
myclass_id int8 not null,
mysubclass_id int4
);
Expression<Object> e = root.join("mySubClassIDs");