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;
}