与错误字段上的 referencedColumnName 映射一对一
One to one with referencedColumnName mapping on wrong field
我在一对一关系中遇到问题。我有 2 tables,一篇文章有 1 个 FK“FICHE_ID”引用了第二个 table 的 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;
拜托,你能帮帮我吗?
我不确定我理解你的问题;但看起来有些事情需要改变。由于外键由 ARTICLE
table 持有,您不能在 Article.fiche
映射上使用 mappedBy
。相反,您应该在 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
是 而不是 Article
的 @NaturalId
;所以你应该简单地删除字段(及其映射)。
我在一对一关系中遇到问题。我有 2 tables,一篇文章有 1 个 FK“FICHE_ID”引用了第二个 table 的 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;
拜托,你能帮帮我吗?
我不确定我理解你的问题;但看起来有些事情需要改变。由于外键由 ARTICLE
table 持有,您不能在 Article.fiche
映射上使用 mappedBy
。相反,您应该在 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
是 而不是 Article
的 @NaturalId
;所以你应该简单地删除字段(及其映射)。