java - jpa/hibernate 如何通过带注释的外键映射元素集合

标签 java mysql spring hibernate jpa

给定这两个表:

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; 

其中 map 的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 成为关键,而 attitude 成为值(value)。

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

最佳答案

使用@MapKeyColumn

试试这个:

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

关于java - jpa/hibernate 如何通过带注释的外键映射元素集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980953/

相关文章:

java - 如何从 BroadcastReceiver 更新 RecyclerView?

mysqlimport速度----制表符分隔的转储文件与SQL格式文件

MySQL 使用内连接计算空值

Spring 命名空间处理程序 - http ://cxf. apache.org/transports/http/configuration

java - 检查 url 是否等于或者是 的子目录?

java - 从 int 转换为 char 数组。索引不正确?

java - 定义构造函数类并初始化值

java - 错误: Could not find or load main class shoutbox.ShoutBox

mysql - 在 MySQL SELECT 中使用 REPLACE()

java - 如何让intellij知道带有其他文件扩展名的xml文件格式?