父实体
class Item{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Column(name="ITEM_NAME")
private String itemName;
@OneToMany(mappedBy = "item", cascade=CascadeType.PERSIST)
private Set<Bid> bids;
....
}
子实体
class Bid{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private BigDecimal amount;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ITEM_ID", nullable=false)
private Item item;
}
当我调用item.getBids()时,它会生成
select bids0_.ITEM_ID as ITEM_ID3_0_0_, bids0_.id as id1_0_0_, bids0_.id as id1_0_1_, bids0_.amount as amount2_0_1_, bids0_.ITEM_ID as ITEM_ID3_0_1_ from BID bids0_ where bids0_.ITEM_ID=?
而是一个只有bidid,ITEM_ID,金额的查询,比如
select bid_.id, bid_.amount as amount2_0_, bid_.ITEM_ID as ITEM_ID3_0_ from BID bid_ where bid_.id=?
如果您注意到第一个查询,则在生成的查询中有两个“bid0_.ITEM_ID”和两个“bid0_.id”列。为什么会这样?我在这里错过了什么吗?为什么生成这些重复的列?
答案 0 :(得分:0)
由于多个左连接发生在父母和子女的情况下。例如,在父类中,有一个到多个,孩子有多对一的关系。因此,当查询运行时,父级将子级连接到db中可用的子行的次数。 我在其中一个论坛上看到,这个问题有两个解决方案:
希望这个链接可能有用...... 的 https://howtoprogramwithjava.com/how-to-fix-duplicate-data-from-hibernate-queries/ 强>
谢谢!