OneToMany Composite主键场景

时间:2012-04-16 21:02:58

标签: java-ee jpa

我有以下场景,避免明显的代码:

一个对象:

@Entity
@Table(name = "poliza")
public class Polizas implements Serializable {
    @Id
    @Column(name = "numero_poliza")
    private BigDecimal numero;
}

一个或多个子对象:

@Entity
@Table(name = "Autos")
@IdClass(AutosPk.class)
public class Autos {
    @Id
    @Column(name = "auto_id")
    private BigDecimal autoId;
    @Id
    @ManyToOne
    @JoinColumn(name = "numero_poliza")
    private Polizas poliza;
}

主要关键类:

public class AutosPk {
    private BigDecimal autoId;
    private BigDecimal poliza;
}

到目前为止一切正常。 但是如果我需要将Autos修改为此(添加其他对象的列表):

@Entity
@Table(name = "Autos")
@IdClass(AutosPk.class)
public class Autos {
    @Id
    @Column(name = "auto_id")
    private BigDecimal autoId;
    @Id
    @ManyToOne
    @JoinColumn(name = "numero_poliza")
    private Polizas poliza;
    @OneToMany(mappedBy = "auto_id", cascade = { CascadeType.ALL })
    private List<AccesoriosAutos> accesorios;
}

孩子:

@Entity
@Table(name = "acce_auto")
@IdClass(AccesoriosAutosPk.class)
public class AccesoriosAutos {
    @Id
    @Column(name = "cod_acces")
    private BigDecimal codAcces;
    @Id
    @ManyToOne
    @JoinColumns({@JoinColumn(name = "numero_poliza", referencedColumnName = "numero_poliza"),
        @JoinColumn(name = "cod_auto", referencedColumnName = "cod_auto")})
    private Autos auto;
}

并在主键类中:

public class AccesoriosAutosPk {
    private BigDecimal codAcces;
    private AutosPk auto;
}

描述的映射是错误的,但我发布这种方式是因为我认为它解释了我的需要。我搜索了几个页面,但我找不到这种映射的方法。

提前感谢您的阅读,

胡安罗梅罗

1 个答案:

答案 0 :(得分:0)

从我的观点来看,我有几件事要提及:

  1. 奇怪的是你正在使用带@Id的@IdClass。
  2. Autos类应将accesorios注释为@OneToMany(mappedBy =“auto”,....)
  3. AccesoriosAuto auto列只是用@JoinColumn注释(name =“cod_auto”)
  4. 希望这有帮助。