2014-11-06 89 views
2

我需要幫助,從這個數據庫中創建正確的POJO的...組合鍵與Hibernate

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; 

} 

問題是當我想參考'門來自'JRV'的icipio'不知道如何訪問'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

這裏您定義了單個連接列,但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; 
+0

感謝您的幫助,但現在我收到此異常 org.hibernate.MappingException:無法在org.hibernate.mapping中查找具有邏輯名稱的列id_municipio。表(elecciones2014.Municipio)及其相關的超類和副表 – 2014-11-06 20:38:54

+0

奇怪......當我在你的問題的實體上嘗試它時,它對我有效。您的項目中的實體與您的問題中的項目是否相同,或者您在此期間以某種方式修改了它們?具體檢查一下你的嵌入式ID中的municipio密鑰是否真的是id_municipio。否則,我不認爲這是行不通的原因。 – 2014-11-06 21:01:04

+0

你是對的,它的工作很完美。我的項目代碼中有一個錯誤,但在解決問題後,您的答案奏效了。非常感謝!! – 2014-11-08 17:51:55