Hibernate的复合键

时间:2014-11-06 19:29:44

标签: java mysql hibernate

我需要帮助才能从这个数据库中创建正确的pojo ...

https://www.dropbox.com/s/j2lfu44zpqfcxb4/dbr.PNG

我尝试过创建这个类......

    @Entity
    @Table(name="Municipio", catalog="elecciones2014", schema="")
    public class Municipio implements Serializable{

    @EmbeddedId
    private MunicipioPk idMunicipio;

    @Basic(optional=false)
    @Column(name="nomb_municipio")
    private String nomb_municipio;
}    

使用此嵌入式课程

    @Embeddable
    class MunicipioPk implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Column(name="id_depto")
    String departamento;

    @Column(name="id_municipio")
    String idMunicipio;

}   

问题是当我想提及' Municipio'来自' JRV'我不知道如何访问字段' id_municipio'。我有这个代码,但它没有工作

    @Entity
@Table(name = "JRV", catalog = "elecciones2014", schema = "")
public class Jrv {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id_jrv")    
private int id;


@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_municipio",referencedColumnName="idMunicipio")
private Municipio municipio;

@ManyToOne
@JoinColumn(name="DUI",referencedColumnName="dui")
private PadronElectoral dui;
}    
有人能帮帮我吗? 我该怎么做?  谢谢你的建议!!

1 个答案:

答案 0 :(得分:1)

这里您定义的是单个连接列,但是Municipio实体的PK有两列。此外,referencedColumnName应该是列的名称而不是实体的属性。

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_municipio",referencedColumnName="idMunicipio")
private Municipio municipio;

所以你可以这样做:

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumns({
    @JoinColumn(name="id_municipio", referencedColumnName="id_municipio"),
    @JoinColumn(name="id_depto", referencedColumnName="id_depto")
})
private Municipio municipio;

哪个转换为这个SQL(我通过上面提到的修改后从你的实体生成SQL模式得到了这个):

create table elecciones2014.JRV (
    id_jrv  serial not null,
    id_depto varchar(255),
    id_municipio varchar(255),
    primary key (id_jrv)
);

alter table elecciones2014.JRV 
    add constraint FK_7scd8alu3nf4tsyh3hq2ryrja 
    foreign key (id_depto, id_municipio) 
    references elecciones2014.Municipio;