Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除JoinTable中joinColumns的NOTNULL约束_Java_Hibernate_Jpa - Fatal编程技术网

Java 删除JoinTable中joinColumns的NOTNULL约束

Java 删除JoinTable中joinColumns的NOTNULL约束,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个实体,依靠它hibernate可以为OneToMany关系生成联接表 @Entity public class RequestType extends EntityObject { @OneToMany(cascade = CascadeType.ALL) @JoinTable(name = "MType_MType", joinColumns = @JoinColumn(name = "mtype_id"), inverseJ

我有一个实体,依靠它hibernate可以为OneToMany关系生成联接表

@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;
 }
@实体
公共类RequestType扩展了EntityObject{
@OneToMany(级联=级联类型.ALL)
@JoinTable(name=“MType\u MType”,joinColumns=@JoinColumn(name=“MType\u id”),
inverseJoinColumns=@JoinColumn(name=“internal\u request\u types\u id”))
私有列表类型;
}
@实体
公共类EntityObject{
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“EntityID”)
私有整数id;
}
但当我运行应用程序时,我收到以下异常:

PSQLException:EROOR:inner\u request\u types\u id列中的null值违反约束NOT null

正如我所知,任何JoinColumn都有一个默认的true为null的参数


否则我如何才能删除notnull约束?

是的,
JoinColumn.nullable()的默认值是
true

/** (Optional) Whether the foreign key column is nullable. */
boolean nullable() default true;
但这与此处无关,因为在
@OneToMany
中未检查
@JoinColumn
中的
nullable()
。Hibernate将始终向这两列添加NOTNULL约束,因为它希望始终存在一个拥有的实体,并且列表从不包含null值

如果您首先想将
null
值添加到列表中(这不是一个错误),您应该考虑另一种选择。例如,您可以向
RequestType
添加一个布尔属性,该属性指示希望使用
null
值实现的状态


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

如果有空值,联接表行的用途是什么?在我看来,空值一开始就不应该存在。我会移除它们并保留约束,你移除它们是什么意思?。。。