【发布时间】:2012-10-15 19:34:11
【问题描述】:
我开始将 JPA 与 OpenJPA API 一起使用,但我遇到了 find() 的问题。 以下是表格:
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);
cia 对象没有@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
如你所见,select中没有t0.id。
感谢您的帮助。
【问题讨论】:
-
cia对象将具有与您在 find 中使用的id相同的值。因为find方法从具有primary key指定值的数据库中获取Entity对象。那么,问题是什么? -
问题是没有发生。如果我希望 cia 对象具有 id 值,我必须使用 setId 方法。这正常吗??
-
@user1748035。不,这不正常。从数据库中获取 id 后,您不必设置它。其他地方有问题..
-
@user1748035。您可以将代码发布到您保存实体的位置以及获取它的位置吗?只是相关代码。
-
@user1748035.. 您是否看到您的数据库实际上是否包含具有该 ID 的条目?