Java 基于两列在Hibernate中填充外部集合
我有一个项目表和一个项目关联表。项目关联维护以某种方式相关的项目组,并包含以下列:Java 基于两列在Hibernate中填充外部集合,java,sql,hibernate,Java,Sql,Hibernate,我有一个项目表和一个项目关联表。项目关联维护以某种方式相关的项目组,并包含以下列:ITEM\u id、group\u id、type、value。例如,一篇文章用3种不同的语言表示相同的内容: id | item_id | group_id | type | value ---------------------------------------- 1 1234 1 'lang' 'en' 2 2345 1 'lan
ITEM\u id、group\u 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对象的集合。检索项目1234关联的SQL示例如下:
select * from ITEM_ASSOCIATION
where group_id in (select group_id from ITEM_ASSOCIATION where item_id = 1234)
有没有办法用标准的Hibernate注释来表示这一点?ITEM_关联表是全新的,因此如果需要,我可以更改模式/添加新表,以便更轻松地使用Hibernate。此外,如果有什么不同,我们的数据库是Oracle。项目实体
@Entity
public class Item {
@OneToMany(mappedBy = "item")
private Set<ItemAssociation> associations;
}
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;
}
然后,为了查询包含所有关联项的项目,而不考虑组:
从项目i中选择i加入FETCH ItemAssociation,其中i.itemId=
实际上,我在item_关联表中遗漏了“id”主键列。我将尝试此设置,不带嵌入id。此外,组不是单独的实体。组id仅存在于项关联表中,并在创建新的关联组时自动递增。@Jared理解,这些实现细节不会影响如何在
项
和项关联
之间发出查询的概念。
@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;
}