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不允许这样做。因此,我需要用我需要的字段创建其他类。