我有 Oracle 数据库。
在我的表中,我有触发器,当插入一些行时会触发。这很好用,当我从 SQLDeveloper 使用它时。但在 Java 中,我想使用 Hibernate 3.3 插入一些行。我的触发器的主体并不重要,假设它定义了当前时间的行的 id。
我的 POJO 实体如下所示:
@Entity
@Table( name = "user" )
public class User implements Serializable
{
private static final long serialVersionUID = 1;
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
@Column( nullable = true, length = 14, name = "user_id" )
private Long userId;
@Column( nullable = true, length = 80, name = "name" )
private String name;
//getters and setters
}
这是我持久化新用户的代码:
SessionFactory sessionFactory = sessionFactoryManager.getCurrentSession();
Session session = sessionFactory.openSession();
User user = new User();
user.setName("TEST");
session.persist(user);
session.flush();
如您所见,我没有设置 userId 字段,因为它应该在插入行之前由我的触发器设置,但它不起作用。我发现,如果我添加 @GeneratedValue 注释,将调用该触发器,但它似乎不适用于 Oracle 数据库:我有一个错误:
Dialect does not support identity key generation
试图解决这个错误我只找到了关于使用序列的文章,但我不想使用序列,我必须使用触发器。