Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么CriteriaBuilder会为“创建格式错误的查询?”;在;收藏桌?_Java_Mysql_Hibernate_Jpa_Jpa 2.0 - Fatal编程技术网

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");