我开始在OpenJPA API中使用JPA,而我遇到了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.
感谢您的帮助。
答案 0 :(得分:0)
如果您没有专门设置@Id
属性的值,则必须使用@GeneratedValue
声明它,以便它自动递增。
答案 1 :(得分:0)
Primary Key (ID) not retrieved (?) from database using OpenJPA
重复....帖子的网络是你需要使用不同的增强方法。