【问题标题】:JPA HIBERNATE - mapping a column twice (embeddedID and POJO)JPA HIBERNATE - 两次映射列(embeddedID 和 POJO)
【发布时间】:2016-09-06 18:06:05
【问题描述】:

我必须映射一个设计糟糕的数据库。在“cote”类中,有一个带有 FK 字段的组合 PK。所以我做了一个可嵌入的,以避免使用带有 IdClass 的派生实体。所以我尝试了这个:

@Entity
@Table(name="EVA_COTE")
public class Cote implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = -3902534586060936635L;

@EmbeddedId
private CotePK cotePK;

@ManyToOne
@JoinColumn(name="Evaluation", referencedColumnName = "NUDOSS")
private Evaluation evaluation;

@ManyToOne
@JoinColumn(name="CRITERE", referencedColumnName = "CODE")
private Critere critere;

@ManyToOne
@JoinColumn(name="SEUIL", referencedColumnName = "CODE")
private Seuil seuil;

@Column(name="VALEUR", columnDefinition="Decimal(5,0)")
private Integer valeur;

@Column(name="OBSERVATIONS", length=500)
private String observations;

使用以下 EmbeddedId :

@Embeddable
public class CotePK implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 6835265195560184935L;
@Column(name="Evaluation", nullable=false)
private Integer evaluationId;

@Column(name="CRITERE", nullable =false)
private String critereId;

@Column(name="SEUIL", nullable=false)
private String seuilId;

如您所见,我在 EmbeddedId 和 Cote 类中使用了评估标准和 seuil 列一次。当然它不起作用,我不知道该尝试什么了。有没有办法强制 JPA 链接这两个字段?

【问题讨论】:

    标签: java hibernate jpa mapping


    【解决方案1】:

    我的最终解决方案: @实体 @Table(name="EVA_COTE") 公共类 Cote 实现 Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = -3902534586060936635L;
    
    @EmbeddedId
    private CotePK cotePK;
    
    @ManyToOne
    @MapsId("evaluationId")
    @JoinColumn(name="EVALUATION", referencedColumnName = "NUDOSS")
    private Evaluation evaluation;
    
    @ManyToOne
    @MapsId("critereId")
    @JoinColumn(name="CRITERE", referencedColumnName = "CODE")
    private Critere critere;
    
    @ManyToOne
    @MapsId("seuilId")
    @JoinColumn(name="SEUIL", referencedColumnName = "CODE")
    private Seuil seuil;
    

    【讨论】:

      【解决方案2】:

      将此注释添加到复合主键

             @EmbeddedId            
             @AttributeOverrides( {
                      @AttributeOverride(name="column_varible_name_1", column=@Column(name="column_name_1", nullable=false, length=<x>) ), 
                      @AttributeOverride(name="column_varible_name_2", column=@Column(name="column_name_2", nullable=false, length=<x>) ) } )
      

      【讨论】:

        猜你喜欢
        • 2016-07-05
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 1970-01-01
        • 2017-01-02
        • 2023-02-14
        • 1970-01-01
        • 2017-01-29
        相关资源
        最近更新 更多