2

我开始将 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

如您所见,选择中没有 t0.id。

谢谢你的帮助。

4

2 回答 2

0

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

于 2012-10-15T19:51:30.220 回答
0

未使用 OpenJPA 从数据库中检索到主键 (ID) (?)

重复....帖子的目的是您需要使用不同的增强方法。

于 2012-10-15T20:03:43.363 回答