我需要帮助从这个数据库创建正确的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;
}
问题是当我想从“JRV”引用“Municipio”时,不知道如何访问字段“id\u 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;
}
有人能帮我吗?
我该怎么做?
谢谢你的建议!!
最佳答案
这里您定义的是单联接列,但是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;