【问题标题】:One to one with referencedColumnName mapping on wrong field与错误字段上的 referencedColumnName 一对一映射
【发布时间】:2020-12-28 10:13:22
【问题描述】:

我在一对一关系上遇到问题。我有 2 个表,一篇文章有​​ 1 个 FK“FICHE_ID”引用到第二个表的 id Fiche(ID_FICHE),问题是 JPA 没有映射到正确的字段,它使用 ID_ARTICLE 映射 ID_FICHE 而不是 FICHE_ID。 这是下面的代码:

@Entity
@Table(name="ARTICLE")
public class Article  implements Serializable{
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID_ARTICLE")
Integer id=0;

@Column(name="ENTREPRISE")
private String entreprise;

@Column(name="CODE_ARTICLE")
private String code;

@Column(name="LIBELLE_ARTICLE")
private String libelle;

@Column(name="ROLE_READ")
private String role;

@Column(name="PRIX")
private int prix;

@Column(name="OBLIGATOIRE")
private String obligatoire;

@NaturalId
@Column(name="TAILLE_CODE")
private String tailleCode;

@NaturalId
@Column(name="FICHE_ID")
private Integer ficheId;

@OneToOne(fetch = FetchType.EAGER,mappedBy="article")
FicheArticle fiche;

@Entity
@Table(name="FICHE")
public class FicheArticle {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID_FICHE",insertable = false,updatable = false)
private Integer id=0;
@Lob
@Column(name="FICHE",insertable = false,updatable = false)
private byte[] fiche;
@Lob
@Column(name="FICHE")
private Blob ficheBlob;
@Column(name="ENTREPRISE")
private String entreprise;
@OneToOne
@JoinColumn(name="ID_FICHE", referencedColumnName = "FICHE_ID")  
private Article article;

拜托,你能帮帮我吗?

【问题讨论】:

    标签: sql spring jpa annotations one-to-one


    【解决方案1】:

    我不肯定我理解你的问题;但看起来有几件事需要改变。由于外键由ARTICLE 表保存,因此您不能在Article.fiche 映射上使用mappedBy。相反,您应该在Article.fichemappedBy 上指定适当的连接列Fiche.article

    @Entity
    @Table(name = "ARTICLE")
    public class Article  implements Serializable {
    
    private static final long serialVersionUID = 1L;
        
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID_ARTICLE")
    Integer id = 0;
    
    // ...
    
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "FICHE_ID", referencedColumnName = "ID_FICHE")
    FicheArticle fiche;
    

    @Entity
    @Table(name = "FICHE")
    public class FicheArticle {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID_FICHE", insertable = false, updatable = false)
    private Integer id = 0;
    
    // ...
    
    @OneToOne(mappedBy = "fiche")
    @JoinColumn(name="ID_FICHE", referencedColumnName = "FICHE_ID")  
    private Article article;
    

    另外,我猜Article.ficheId 不是 @NaturalId for Article;所以您应该简单地删除该字段(及其映射)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多