有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java基于两列在Hibernate中填充外部集合

我有一个项目表和一个项目关联表。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对象的集合。检索项目1234关联的SQL示例如下:

select * from ITEM_ASSOCIATION 
where group_id in (select group_id from ITEM_ASSOCIATION where item_id = 1234)

有没有办法用标准的Hibernate注释来表示这一点?ITEM_关联表是全新的,因此如果需要,我可以更改模式/添加新表,以便更轻松地使用Hibernate。另外,如果这有什么区别的话,我们的数据库就是Oracle


共 (1) 个答案

  1. # 1 楼答案

    项目实体

    @Entity 
    public class Item {
      @OneToMany(mappedBy = "item")
      private Set<ItemAssociation> associations;
    }
    

    项目关联实体

    @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 = ?