JPA find()不加载实体@Id

时间:2012-10-15 19:34:12

标签: java jpa openjpa

我开始在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.

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您没有专门设置@Id属性的值,则必须使用@GeneratedValue声明它,以便它自动递增。

答案 1 :(得分:0)

Primary Key (ID) not retrieved (?) from database using OpenJPA

重复....帖子的网络是你需要使用不同的增强方法。