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

hibernate层次结构:鉴别器列不允许为NULL

杜曜灿
2023-03-14

我有一个基于hibernate策略single_table的实体层次结构,并且我在application.yml中设置了ddl-auto=update

当我使用h2db运行测试时,我得到“null not allowed for column”。

==================
Shape      
    |--> Square
    |--> Cube
==================


@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "IS_SOLID", discriminatorType = DiscriminatorType.INTEGER)
@DiscriminatorValue(value = "-1")
public abstract class Shape{
...
}

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorValue(value = "null")
public class Square extends Shape{
...
}


 @Entity
 @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
 @DiscriminatorValue(value = "1")
 public class Cube extends Shape{
 ...
 }

ddl-auto=update指令创建形状表时,它将鉴别器列设置为not null,因此得到“null not allowed for column”。

是否有一种方法可以使用DDL-AUTO强制区分器列为null?

共有1个答案

吴俊晤
2023-03-14

可以使用@DiscriminatorColumn的columnDefinition属性指定它

@DiscriminatorColumn(name = "IS_SOLID", discriminatorType = 
                     DiscriminatorType.INTEGER, columnDefinition = "INT(1) NULL")
 类似资料:
  • 我们有一个遗留表,我们不想在其中添加鉴别器列。没有鉴别器列,是否有可能有每个层次结构的表? 我的父类代码: 我的孩子班: 你可以在我上面的例子中看到,我必须使用鉴别器。

  • 问题内容: 我在 .NET for WinRT(C#)中 ,我想将JSON字符串反序列化为,然后将字典值稍后转换为实际类型。JSON字符串可以包含对象层次结构,我也希望在其中包含子对象。 这是应该能够处理的示例JSON: 我尝试使用 DataContractJsonSerializer 这样做: 实际上,这对于第一个级别是可行的,但是 “父母” 只是一个不能强制转换为的对象: 然后,我尝试使用 J

  • 问题内容: 我试图从我的MySQL数据库中按层次结构获取所有类别和子类别: 我的结果应该是这样(只是示例): 猫A 子猫1 Sub_Sub_Cat 1 Sub_Sub_Cat 2 子猫2 猫B C猫 … MySQL代码: 简而言之,如何在使用 PHP代码 的层次结构中获得它? 问题答案: 使用邻接表模型时,您可以一次性生成结构。 取自一遍父子数组结构(2007年9月; Nate Weiner撰写)

  • 我想枢轴的数据帧像: 进入具有如下分层列的数据帧: 我尝试了,但它只会给我一个这样的框架: 如何更改列的层次结构?

  • 我试图执行我的保存endpoint到邮递员,我收到这个错误: 原因:org.h2.jdbc.JdbcBatchUpdateException: NULL不允许列CREATION_DATE;SQL语句:插入到客户(authentication_uid、creation_date、customer_uid、default_payment_method_uid、guid、last_edit_date、p

  • 我使用hibernate在我的应用程序中创建了< code>Device表。每个< code >设备对象包含3种类型的对象,如< code>SADevicede 、< code>TXDeviceType 、< code>RxDeviceType。(ie)设备包含SADeviceType、TXDeviceType、RxDeviceType列表 我的目标是使用用户定义的限制为每个SADevicetyp