使用GenericGenerator的Hibernate GeneratedValue将被忽略

时间:2015-10-05 14:48:51

标签: java hibernate db2

此字段“auftragsnummer”始终保持为null,即使它使用@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)存储它。引用的生成器类实现org.hibernate.id.IdentifierGenerator。 我不知道为什么会被忽略。

环境:

  • Hibernate 5.0.1
  • Spring 4.2.1
  • Java 7
  • DB2 10

1 个答案:

答案 0 :(得分:1)

JPA仅在@GeneratedValue字段上强制要求@Id

如果您的订单号不依赖于实体的主键,那么最简单的解决方案就是使用@PrePersist,例如

@PrePersist
public void onCreate() {
    auftragsnummer = ...;
}