【问题标题】:jpa / hibernate how to map element collection by foreign key with annotationsjpa / hibernate如何通过带有注释的外键映射元素集合
【发布时间】:2016-01-04 00:27:48
【问题描述】:

鉴于这两个表:

CREATE TABLE `soc` (
   `id` INT NOT NULL AUTO_INCREMENT,
   `name` VARCHAR(32),
    PRIMARY KEY (`id`));

CREATE TABLE `soc_attitude` (
   `soc_id` INT NOT NULL,
    `target_soc_id` INT NOT NULL,
    `attitude` INT,
    PRIMARY KEY (`soc_id`,`target_soc_id`));

Soc 类中,我想使用如下字段从 soc_attitude 表中获取与 this.soc_id 匹配的所有行:

private Map<Integer,Integer> attitudes; 

其中地图的key是target_soc_id,value是attitude

我已经做到了:

 @Entity
 @Table(name = "soc")
 public class Soc {
    @Id
    @Column( name="id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name="name")
    private String name;

    @ElementCollection
    @CollectionTable(name="soc_attitude",joinColumns=@JoinColumn(name="soc_id"))
    @Column(name="attitude")
    private Map<Integer,Integer> attitudes; 

但我认为这将使 soc_id 成为关键,态度 成为价值。

我使用什么注释? (使用 Hibernate 4.3.11.Final)

【问题讨论】:

    标签: java mysql spring hibernate jpa


    【解决方案1】:

    使用@MapKeyColumn

    试试这个:

    @ElementCollection
    @CollectionTable(name="soc_attitude",joinColumns=@JoinColumn(name="soc_id"))
    @Column(name="attitude")
    @MapKeyColumn(name="target_soc_id")
    private Map<Integer,Integer> attitudes; 
    

    【讨论】:

    • 工作就像一个魅力!谢谢你。我在 Hibernate 集合映射文档中看到了这一点,但不清楚它是否也可以应用于 @ElementCollection。
    • 如果attitude 是 JPA 实体,它会是什么样子?喜欢Map&lt;Integer, Attitude&gt; attitudes。使用它获取 SQL 错误。干杯
    • @Blauhirn ok 自己修复了它:在这种情况下,需要使用 @ManyToMany@JoinTable 而不是 elem.collection 和 coll.table。
    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多