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

删除JoinTable中joinColumns的not null约束

浦毅
2023-03-14

我有一个实体,依靠它hibernate可以为一个Tomany-Relations生成连接表。

@Entity
public class RequestType extends EntityObject {
   @OneToMany(cascade = CascadeType.ALL)
   @JoinTable(name = "MType_MType", joinColumns = @JoinColumn(name = "mtype_id"), 
   inverseJoinColumns = @JoinColumn(name = "inner_request_types_id"))
   private List<LogicalInnerType> innerRequestTypes;
 }

@Entity
public class EntityObject {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EntityID")
  private Integer id;
 }

但当我运行应用程序时,我收到以下异常:

psqlexception:eroor:列“inner_request_types_id”中的null值违反约束NOT null

否则我如何删除NotNull-Constraint?

共有1个答案

戚学
2023-03-14

是,JoinColumn.Nullable()的默认值为true:

/** (Optional) Whether the foreign key column is nullable. */
boolean nullable() default true;

但这与这里无关,因为nullable()不会检查@joincolumn中的@joincolumn。Hibernate将始终向两列添加一个not null约束,因为它期望始终存在一个拥有实体,并且列表永远不包含空值。

如果您想首先将null值添加到列表中(这不是一个错误),那么您应该考虑一个替代方案。例如,您可以向requesttype添加一个布尔属性,该属性指示您希望通过null值实现的状态。

顺便说一下,还有一件事,在你的模型中显然是不正确的。您使用的是列表,但未添加@OrderColumn。因此,Hibernate无法确保任何秩序。如果您确实希望存储特定的订单,则应该添加@ordercolumn注释。或者改用

 类似资料:
  • 问题内容: 从如上所述映射的列表中删除元素时出现问题。这是映射: 插入Bar实例并保存Foo效果很好,但是当我从列表中删除一个元素并再次保存时,映射表中对bar_id的唯一约束被违反。以下SQL语句是由hibernate发出的,这些看起来很奇怪: 考虑到Hibernate生成的语句,该错误完全有意义(列表中有五个项目,我删除了第一个项目,Hibernate删除了具有LAST索引的映射行,并尝试从第

  • 问题内容: 我创建了一些没有显式名称的外键。 然后我发现SQL生成了疯狂的名称,例如。猜猜它们将在不同的服务器上以不同的名称生成。 是否有任何不错的功能来删除未命名的FK约束,这些表和字段作为参数传递? 问题答案: 没有内置的过程可以完成此操作,但是您可以使用information_schema视图中的信息来构建自己的过程。 基于表的示例

  • 问题内容: 我尝试删除h2中以前创建为的列的唯一约束。 我试过了: 但是没有成功(如下): 如何正确消除此约束? 顺便一提: 似乎返回正确的输出。 问题答案: 在SQL语言中,标识符名称不能是表达式。您需要运行两个语句: 然后获取标识符名称,并运行该语句

  • 问题内容: 我一直在搞怪它并使用它搜索了大约4天,我对Hibernate注释如何与JPA注释一起工作感到疯狂。我有两个非常简单的实体: 学生 电话 我将整个代码粘贴到这里,以便您可以看到导入的来源。我认为问题就在那里。 重要提示 :我使用的是Hibernate Docs建议的 好!现在,我创建了一个包含两个电话号码的,并将其正确保存在数据库中。这将创建以下内容: 学生 学生电话 电话 问题来了。如

  • 在我的Spring/MySql系统中,我有一些Jpa实体,它们通过父关系上的joinTable在OneToMany关系中连接。在这种情况下,一个帖子有很多评论。 如果我尝试删除Post实体,问题是生成的SQL试图删除仍在连接表中的注释,从而触发外键冲突。 什么是正确的方法: 删除连接表项 删除连接表左侧父关系实体 删除连接表右侧子关系实体 要记住的一些事情: 还有其他实体通过oneTo多项关系拥有

  • 我正在使用model属性来获取employee对象。xml文件包含hibernate验证器依赖项。