JPA / Hibernate如何使用注解将元素集合映射到外键

3

给出以下两张表:

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; 

这里的地图键是target_soc_id,值是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成为关键字,attitude成为值。

我应该使用哪些注释?(使用Hibernate 4.3.11.Final)

1个回答

2

使用@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。 - Maxfield Chandler
如果attitude是一个JPA实体,它应该是什么样子呢?像这样:Map<Integer, Attitude> attitudes。在使用时遇到了SQL错误。祝好! - phil294
@Blauhirn 好的,我自己解决了:在这种情况下,需要使用@ManyToMany@JoinTable而不是elem.collection和coll.table。 - phil294

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接