使用 GenericGenerator 的 Hibernate GeneratedValue 被忽略
Hibernate GeneratedValue using GenericGenerator is ignored
此字段 "auftragsnummer" 始终保持为空,即使它使用 @GeneratedValue:
注释也是如此
@Entity
public class Auftrag implements Serializable
{
@Id
@GeneratedValue
private int id;
@Pattern(regexp = AUFTRAGSNUMMER_REGEXP, message = "{validator.auftragsnummer}")
@Length(min = 20, max = 20)
@GenericGenerator(name = "sequence_auftragsnummer", strategy = "de.software.AuftragsnummerGenerator")
@GeneratedValue(generator = "sequence_auftragsnummer")
@Column(unique = true, nullable = false)
private String auftragsnummer;
}
我使用getHibernateTemplate().persist(t)
存储它。引用的生成器 class 实现了 org.hibernate.id.IdentifierGenerator
。
我不知道为什么它被忽略了。
环境:
- 休眠 5.0.1
- Spring 4.2.1
- Java 7
- DB2 10
JPA 仅强制支持 @Id
字段上的 @GeneratedValue
。
如果您的订单号不依赖于实体的主键,那么最简单的解决方案是使用 @PrePersist
例如
@PrePersist
public void onCreate() {
auftragsnummer = ...;
}
此字段 "auftragsnummer" 始终保持为空,即使它使用 @GeneratedValue:
注释也是如此@Entity
public class Auftrag implements Serializable
{
@Id
@GeneratedValue
private int id;
@Pattern(regexp = AUFTRAGSNUMMER_REGEXP, message = "{validator.auftragsnummer}")
@Length(min = 20, max = 20)
@GenericGenerator(name = "sequence_auftragsnummer", strategy = "de.software.AuftragsnummerGenerator")
@GeneratedValue(generator = "sequence_auftragsnummer")
@Column(unique = true, nullable = false)
private String auftragsnummer;
}
我使用getHibernateTemplate().persist(t)
存储它。引用的生成器 class 实现了 org.hibernate.id.IdentifierGenerator
。
我不知道为什么它被忽略了。
环境:
- 休眠 5.0.1
- Spring 4.2.1
- Java 7
- DB2 10
JPA 仅强制支持 @Id
字段上的 @GeneratedValue
。
如果您的订单号不依赖于实体的主键,那么最简单的解决方案是使用 @PrePersist
例如
@PrePersist
public void onCreate() {
auftragsnummer = ...;
}