我有一个ITEM表和一个ITEM_ASSOCIATION表。 ITEM_ASSOCIATION维护以某种方式相关的ITEM组,并包含以下列:item_id, group_id, type, value
。一个示例可能是一篇用3种不同语言表示相同内容的文章:
id | item_id | group_id | type | value
----------------------------------------
1 1234 1 'lang' 'en'
2 2345 1 'lang' 'es'
3 3456 1 'lang' 'fr'
我有一个Item和ItemAssociation Java Hibernate实体,我希望Item类包含ItemAssociation对象的集合,这些对象属于Item所属的任何组。用于检索Item 1234的关联的示例SQL将是:
select * from ITEM_ASSOCIATION
where group_id in (select group_id from ITEM_ASSOCIATION where item_id = 1234)
有没有办法用标准的Hibernate注释来表示? ITEM_ASSOCIATION表是全新的,因此如果需要,我可以更改架构/添加新表,以便更容易使用Hibernate。此外,如果这有任何不同,我们的数据库是Oracle。
答案 0 :(得分:0)
物品实体
@Entity
public class Item {
@OneToMany(mappedBy = "item")
private Set<ItemAssociation> associations;
}
ItemAssocation实体
@Entity
public class ItemAssociation {
@EmbeddedId
private ItemAssociationId id;
@Column
private String value;
@JoinColumn(name = "itemId", insertable = false, updatable = false)
private Item item;
@JoinColumn(name = "groupId", insertable = false, updatable = false)
private Group group;
}
ItemAssociationId主键嵌入
@Embeddable
public class ItemAssociationId implements Serializable {
@Column(nullable = false, updatable = false)
private Long itemId;
@Column(nullable = false, updatable = false)
private Long groupId;
@Column(nullable = false, updatable = false)
private String type;
}
然后,为了查询包含所有关联的项目,无论是哪个组:
SELECT i FROM Item i JOIN FETCH ItemAssociation WHERE i.itemId =?