Java @@Id和序列的继承(策略=InheritanceType.TABLE\u PER\u类)问题
我在继承(strategy=InheritanceType.TABLE\u PER\u CLASS)和自动生成的表ID方面遇到了麻烦 以下是我的模型:Java @@Id和序列的继承(策略=InheritanceType.TABLE\u PER\u类)问题,java,hibernate,jpa,hibernate-mapping,Java,Hibernate,Jpa,Hibernate Mapping,我在继承(strategy=InheritanceType.TABLE\u PER\u CLASS)和自动生成的表ID方面遇到了麻烦 以下是我的模型: @Getter @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @DiscriminatorColumn(name = "type") @SuperBuilder @NoArgsConstructor public abstract class MenuEntity
@Getter
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name = "type")
@SuperBuilder
@NoArgsConstructor
public abstract class MenuEntity {
@Id
@EqualsAndHashCode.Include
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
//...
}
在开发过程中,我定义了一个data.sql
脚本,它将测试数据插入我的H2
inmemory数据库。只有当我在语句中指定ID
值时,这些脚本才能正常工作,在其他情况下,“ID”列不允许使用NULL
。因此,我必须在insert语句中设置ID
(该问题不会出现在没有继承策略和@GeneratedValue(strategy=GenerationType.IDENTITY)
的其他实体中)
一个新的问题出现了:当应用程序尝试在执行时插入简化功能时,会引发异常:org.h2.jdbc.JdbcSQLException:唯一索引或主键冲突:“primary key on PUBLIC.SIMPLE_MENU(ID))
因为序列
仍然是值1
,即使它已经有一些测试数据
到目前为止我有一些问题
1.我的模型对吗?
我必须在我的抽象类中使用@Entity
而不是@MappedSuperclass
,因为它有@manytone
注释
ID
属性对于所有子表都是通用的,但我希望每个表都有自己的ID
序列
2.对于SQL
INSERT
语句,我应该如何处理自动生成的ID
?
我需要在我的开发应用程序中的测试数据
@Getter
@Entity
@Table(name = "tasting_menu")
@SuperBuilder
@NoArgsConstructor
public class TastingMenuEntity extends MenuEntity {
//...
}
@Getter
@Setter
@Entity
@Table(name = "simple_menu")
@SuperBuilder
@NoArgsConstructor
public class SimpleMenuEntity extends MenuEntity {
//...
}