【发布时间】:2012-01-18 21:13:18
【问题描述】:
我有一个对象,其中包含一个列表作为其字段,该对象映射到数据库。 我正在尝试创建一个查询,该查询将从对象和前面提到的列表中选择一些字段。
对象映射:
@Entity
@Table(name="buys")
@PrimaryKeyJoinColumn(name="buy_id")
public class Buy extends DomainObject implements Serializable {
@Column(name = "buy_name")
private String buyName;
@OneToMany( cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="buy_id", referencedColumnName = "buy_id")
private List<InsersionOrder> insertionOrders;
//other fields omitted
}
我正在使用的查询:
"select new com.dtos.domainObjects.BuyDTO(b.id, b.buyName, b.insertionOrders) from Buy b where b.buyGroupId = :groupId and b.isDeleted = false"
运行此查询时,休眠(我的 JPA 供应商)会生成错误查询:
Hibernate: select buy0_.buy_id as col_0_0_, buy0_.buy_name as col_1_0_, . as col_2_0_ from buys buy0_ inner join domain_objects buy0_1_ on buy0_.buy_id=buy0_1_.id inner join insertion_orders insertiono1_ on buy0_.buy_id=insertiono1_.buy_id inner join domain_objects insertiono1_1_ on insertiono1_.io_id=insertiono1_1_.id where buy0_.buy_group_id=? and buy0_1_.is_deleted=0
InsertionOrder 字段也继承自 DomainObject。
如果我省略该列表并仅从 Buy 对象中选择“简单”字段(即 id、name),则查询工作正常。
我错过了什么?
谢谢。
【问题讨论】: