如何解决一对一,在错误字段上使用referencedColumnName 映射
我在一对一的关系中遇到了问题。我有 2 个表,其中一篇文章有 1 个 FK“FICHE_ID”,引用了第二个表的 id Fiche(ID_FICHE),问题是 JPA 没有映射到正确的字段,它使用 ID_ARTICLE 来映射 ID_FICHE 而不是 FICHE_ID。 这是下面的代码:
@JsonIgnoreProperties(ignoreUnknown = true)
和
@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;
拜托,你能帮我吗?
解决方法
我并不肯定我理解你的问题;但看起来有些事情需要改变。由于外键由 ARTICLE
表保存,因此您不能在 mappedBy
映射上使用 Article.fiche
。相反,您应该在 Article.fiche
和 mappedBy
上指定适当的连接列:
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
;所以你应该简单地删除该字段(及其映射)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。