我開始在OpenJPA API中使用JPA,並且我遇到了find()問題。 下面是表:JPA find()不加載實體@Id
CREATE TABLE compania (
ID int(11) NOT NULL,
NOMBRE varchar(45) DEFAULT NULL,
PRIMARY KEY (ID)
)
CREATE TABLE modelo (
ID int(11) NOT NULL,
ID_COMPANIA int(11) DEFAULT NULL,
NOMBRE_MODELO varchar(45) DEFAULT NULL,
PRIMARY KEY (ID),
KEY MODELO_COMPANIA_FK_idx (ID_COMPANIA),
CONSTRAINT MODELO_COMPANIA_FK FOREIGN KEY (ID_COMPANIA) REFERENCES compania (ID)
)
,這裏是我的實體:
@Entity
public class Compania extends EntityJPA{
private static final long serialVersionUID = 1L;
@Id
private int id;
@Column
private String nombre;
@OneToMany(mappedBy="compania",cascade={CascadeType.ALL})
@JoinColumn(name="ID_COMPANIA", nullable=false)
private List<Modelo> listaModelos;
public Compania() {
}
public int getId() {
return id;
}
public void setId(int idCompania) {
this.id = idCompania;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombreCompania) {
this.nombre = nombreCompania;
}
public List<Modelo> getListaModelos() {
return listaModelos;
}
public void setListaModelos(List<Modelo> listaModelos) {
this.listaModelos = listaModelos;
}
}
@Entity
public class Modelo extends EntityJPA{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name="NOMBRE_MODELO")
private String nombreModelo;
@ManyToOne
@JoinColumn(name="ID_COMPANIA", referencedColumnName="ID")
private Compania compania;
public Modelo() {
}
public Compania getCompania() {
return compania;
}
public void setCompania(Compania compania) {
this.compania = compania;
}
public int getId() {
return id;
}
public void setId(int idModelo) {
this.id = idModelo;
}
public String getNombre() {
return nombreModelo;
}
public void setNombre(String nombreModelo) {
this.nombreModelo = nombreModelo;
}
}
此刻,我讓
Compania cia = getEntityManager().find(Compania.class, idCompania);
中情局對象不具有的價值@ Id屬性,它具有nombre但不是id的值。我的意思是:
cia.getId() = 0
,它必須是1或2,等不爲0
非常感謝您的幫助。
我沒有代碼來堅持,因爲它已經存在。 對於發現的代碼是
public static Compania findCompania(int idCompania){
try {
Compania cia = getEntityManager().find(Compania.class, idCompania);
return cia;
} finally {
closeEntityManager();
}
}
如果我激活日誌,這是選擇它表明:
482 testMySql TRACE [http-bio-8080-exec-5] openjpa.jdbc.SQL - <t 1228180882, conn 1699837157> executing prepstmnt 2127861376 SELECT t0.nombre FROM Compania t0 WHERE t0.id = ? [params=(int) 1]
497 testMySql TRACE [http-bio-8080-exec-5] openjpa.jdbc.SQL - <t 1228180882, conn 1699837157> [15 ms] spent
正如你所看到的,有在選擇沒有t0.id。
感謝您的幫助。
'cia'對象對於您在find中使用的'id'具有相同的值。因爲'find'方法從數據庫中獲取具有'primary key'指定值的'Entity'對象。那麼,這有什麼問題? –
問題是沒有發生。如果我想要cia對象有id值,我必須使用setId方法。這是正常的嗎? – Luislode
@ user1748035。不,這不正常。從數據庫中獲取後,您不必設置該ID。其他地方有問題.. –