Muh*_*ooq 6 java db2 hibernate jpa spring-data-jpa
我正在尝试使用 Hibernate 在 DB2 数据库中插入一个实体。我的实体有一个 @EmbeddedId,并且带有 @Embeddedable 的类有一个字段,该字段是我的 DB2 表中自动生成的列。持久化实体后,它因此错误而失败
SQL Error: -798, SQLState: 428C9
DB2 SQL Error: SQLCODE=-798, SQLSTATE=428C9, SQLERRMC=ID, DRIVER=4.9.78
SQL Error: -727, SQLState: 56098
DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-798;428C9;ID, DRIVER=4.9.78
On release of batch it still contained JDBC statements
Error Refeshing Firmware Level Sources :org.springframework.dao.InvalidDataAccessResourceUsageException: could not perform addBatch; SQL [insert into Db2Schema.table_entity ( ID, KEY1, KEY2, KEY3, .....) values (?, ?, ?, ?, ......)]; nested exception is org.hibernate.exception.SQLGrammarException: could not perform addBatch
Run Code Online (Sandbox Code Playgroud)
这是我的实体(仅显示使用 @EmbeddedId 的部分)
@Entity
@Table(name="table_entity", schema="Db2Schema")
@DynamicUpdate @DynamicInsert
public class TableEntity implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private TableEntityKey tableEntityKey;
............ Rest of the entity Fields .............
}
Run Code Online (Sandbox Code Playgroud)
这是带有 @Embeddable 注解的类:
@Embeddable
public class TableEntityKey implements Serializable{
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID", insertable = false, updatable = false)
// @Transient
private Integer id;
@Column(name="key1", length=254, insertable=false, updatable=false)
private String key1;
@Column(name="key2", nullable=false, length=256, insertable=false, updatable=false)
private String key2;
@Column(name="key3", nullable=false, length=256, insertable=false, updatable=false)
private String key3;
..... getters and setters go here ................
}
Run Code Online (Sandbox Code Playgroud)
POM.xml 中的 Hibernate 依赖项
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>4.3.11.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是 DDL
CREATE TABLE
TABLE_ENTITY
(
..... REST OF THE COLUMNS OF THIS TABLE .......
ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 14350),
KEY1 VARCHAR(256) NOT NULL,
KEY2 VARCHAR(256) NOT NULL,
KEY3 VARCHAR(256) NOT NULL,
PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)
hibernate生成的INSERT语句:
insert into Db2Schema.table_entity ( ID, KEY1, KEY2, KEY3, .....) values (?, ?, ?, ?, ......)
Run Code Online (Sandbox Code Playgroud)
如果它将 @Transient 注释放在 Id 字段上,它会很好地工作,但我不想使用 @Transient 注释,因为它会一起忽略该字段,并且我需要在我的用例中进一步使用它。我想做的就是在插入期间忽略该字段。我尝试设置 insertable=false 但它也不起作用。
感谢您的帮助!
将 IDENTITY 字段从 @Embeddable Class 转换为 @Entity Class 对我有用。
它现在看起来像这样:
@Entity
@Table(name="table_entity", schema="Db2Schema")
@DynamicUpdate @DynamicInsert
public class TableEntity implements Serializable {
private static final long serialVersionUID = 1L;
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private Integer Id;
@EmbeddedId
private TableEntityKey tableEntityKey;
............ Rest of the entity Fields .............
}
@Embeddable
public class TableEntityKey implements Serializable{
@Column(name="key1", length=254)
private String key1;
@Column(name="key2", nullable=false, length=256)
private String key2;
@Column(name="key3", nullable=false, length=256)
private String key3;
..... getters and setters go here ................
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6102 次 |
| 最近记录: |