Java 删除JoinTable中joinColumns的NOTNULL约束
我有一个实体,依靠它hibernate可以为OneToMany关系生成联接表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
@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
注释。或者您使用一个集合
。如果有空值,联接表行的用途是什么?在我看来,空值一开始就不应该存在。我会移除它们并保留约束,你移除它们是什么意思?。。。