Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 在hibernate选择中创建对象_Java_Hibernate_Hql - Fatal编程技术网

Java 在hibernate选择中创建对象

Java 在hibernate选择中创建对象,java,hibernate,hql,Java,Hibernate,Hql,我有两门课: class A { B b; public A() {} public A(B b) { setB(b); } ... } class B { int id; public B(int id) { setId(id); } } 在hql中,我希望如下选择: select new A( new B(a.b.id) ) from A a 但我犯了个错误 org.hibernate.hql.PARSER-第1:48行:意外标记: 是否可以在参数中创建对象,或者只选择字段并在构造函

我有两门课:

class A {
B b;

public A() {}
public A(B b) { setB(b); }
...
}

class B {
int id;
public B(int id) { setId(id); }
}
在hql中,我希望如下选择:

select new A( new B(a.b.id) ) from A a
但我犯了个错误

org.hibernate.hql.PARSER-第1:48行:意外标记:


是否可以在参数中创建对象,或者只选择字段并在构造函数中创建它?

不确定我是否完全理解您想要实现的目标。但是您可以创建一个HQL查询(带有投影),以便只查询您感兴趣的列,如:

select a.whatever, b.id from A a join a.b b
然后,为接口提供一个实现,并使用
query.setResultTransformer(yourTransformer)


结果转换器的实现负责为
A
B

创建实例,您可以考虑编写自己的函数来构建查询并使用StrinBuilder类-使用hql.append而不是编写查询

导入org.hibernate.hibernate; 导入org.hibernate.search.FullTextQuery; 导入org.hibernate.search.FullTextSession; 导入org.hibernate.search.search

不确定它是否有用,否则就去看看cyclos web应用程序——它包含很多查询和相应的java文件。它是开源的,使用了全面的hibernate


你到底想要什么?为什么您需要在这里使用
new
,您不能只做
选择一个…
?在这个类中有更多的字段,我不想选择它们。witch“SELECT new a(a.b.id)from a a”hibernate将为该字段生成SELECT,而不是为其他迫切需要的字段生成SELECT。我想要的是得到object而不是int值。但在B中也有一些我不需要的急切字段,因此我不想得到完整的B对象。这个查询只返回任何内容和id的列表。我需要对象列表,但如果A很大并且与其他对象有很多关系,选择这个A可能需要一些时间。有时我只需要一个列表,其中只有几个相关对象中的几个字段。我可以用“从A中选择新的A(A.whatever,A.b)”,但它会选择完整的b对象,我只需要从中选择id,因此最好的查询方式是“从A中选择新的A(A.whatever,A.b.id)”,但hibernate不允许这样做。因此,我需要用我需要的字段创建其他类。