当前位置: 首页 > 知识库问答 >
问题:

Hibernate@joincolumns,可插入 true 不允许插入

穆宏胜
2023-03-14

我有两个表,它们的关系如下图所示

我创建了Hibernate数据模型,如下所示

@Entity
@Table(name = "SUBJECT")
public class Subject {

  @Column(name = "NAME")
  private String name;

  @Column(name = "ADDRESS")
  private String address;

  @Column(name = "CLIENT_ID")
  private String clientId;

  @OneToMany(mappedBy = "subject", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
  private List<SSI> SSIs;

  // getters and setters
  ...
  
}
@Entity
@Table(name = "SUBJECT_IDENTIFIER")
public class SubjectIdentifier {

  @Column(name = "VALUE")
  private String value;


  @Column(name = "AUTHORITY")
  private String authority;


  @Column(name = "TYPE")
  private String type;


  @ManyToOne
  @JoinColumns({
      @JoinColumn(name = "SUBJECT_ID", referencedColumnName = "ID", insertable = true,
          updatable = true,
      @JoinColumn(name = "CLIENT_ID", referencedColumnName = "CLIENT_ID", insertable =
          true, updatable = true)
  })
  private Subject subject;

  // getters and setters
  ...
}
@Entity
@Table(name = "SSI")
public class SSI {
  @ManyToOne
  @JoinColumns({
      @JoinColumn(name = "SUBJECT_ID", referencedColumnName = "ID", insertable = true,
          updatable = true),
      @JoinColumn(name = "CLIENT_ID", referencedColumnName = "CLIENT_ID", insertable =
          true, updatable = true)
  })
  private Subject subject;

  @OneToOne(cascade = CascadeType.ALL)
  @JoinColumns({
      @JoinColumn(name = "SUBJECT_IDENTIFIER_ID", referencedColumnName = "ID", insertable = true,
          updatable = true),
      @JoinColumn(name = "CLIENT_ID", referencedColumnName = "CLIENT_ID", insertable =
          true, updatable = true)
  })
  private SubjectIdentifier subjectIdentifier;

  // getters and setters
  ...
}

我打算创建如下实体

  ...
  Subject s = new Subject();
  //.. initialization of s goes here

  SubjectIdentifier si = new SubjectIdentifier();
  //.. initialization of si goes here

  SSI ssi = new SSI();
  ssi.setSubject(s);
  ssi.setSubjectIdentifier(si);

  s.setSSI(ssi);

  ...
  emProvider.get().persist(s); 

当我运行这个时,我得到以下错误

org.hibernate.MappingException:实体映射中的重复列:*。SSI 列:CLIENT_ID(应使用 insert=“false” update=“false”进行映射)

如果我设置插入="false"更新="false"为CLIENT_ID,它将再次错误关于插入的混合

如果我为所有@JoinColumns设置insert=“false”update=“false”,那么它不会保留对象

如何真正处理这种实体创建?

共有1个答案

奚光霁
2023-03-14

您可以访问下面的链接:

org.hibernate.MappingException:实体映射中的列重复

 类似资料:
  • 问题内容: 我有两个实体: 我正在尝试通过执行以下操作插入文件(以及随后的标签): 然后,我使用以下命令将文件插入DAO: 在我的日志中,我在“文件”表中看到一个插入,在标签表中看到2个插入,但是,指向我的文件表(file_id)的标签表中的外键为NULL。 我可能做错了什么? 问题答案: 您不是将标签的文件设置为文件,而是将标签的文件设置为文件。请记住,在OOP中,与关系模型相反,您必须设置关系

  • 这是我的插入代码,后面是创建表的代码 我不想插入任何东西到列占用,我不知道为什么这是发生的或如何修复它。我只想在tblGrave(GraveName)中插入值。任何帮助都会很好。

  • 问题内容: 我正在研究与H2数据库接口的Java插件。我真正想要的是“插入忽略”语句;但是,我知道H2不支持此功能。我也知道Merge,但这并不是我想要的,如果记录存在,我不想更改它。 我正在考虑的是只是运行插入并让重复键异常发生。但是,我不希望这填满我的日志文件。DB调用发生在我无法更改的导入类中。所以我的问题是: 这是合理的做法吗?我不是让错误发生的人,但这似乎是这种情况下的最佳方法(它应该不

  • 我有以下代码: 其中,是一个标识列,其中不允许有空值。在我的Excel文件中,该列是空的(除了标题) 我得到以下错误消息: 无法将值NULL插入列AmountId中,表AnalyticsV2P7. CapModel. LedgerAmountByECMAcCountByRptLOB;列不允许空值。INSERT失败。 我知道不允许有空值,因为我是这样设置的,但它不应该填充标识列,这样就没有空值了吗?

  • 使用flyway-core:4.1.2进行数据库迁移。 添加了一个新的DDL文件供flyway执行。Flyway会正确执行DDL并对表和列进行相应的更改。(我们在新的DDL中添加了一个表并更改了以前的一些列)。 但是,flyway无法将此尝试注册到schema_version表:我得到以下错误: 架构[dbo]的当前版本:2.1 无法在元数据表[dbo]中插入版本“3.0”的行。[schema_v

  • 本文向大家介绍插入Delete GetRandom O(1)-C ++中允许重复,包括了插入Delete GetRandom O(1)-C ++中允许重复的使用技巧和注意事项,需要的朋友参考一下 假设我们要创建一个支持某些操作的数据结构,这些操作必须在O(1)的时间内执行。所以让这些操作像- insert(x):将x插入集合 remove(x):从集合中删除x getRandom():这将找到该集