0

我有 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

试图解决这个错误我只找到了关于使用序列的文章,但我不想使用序列,我必须使用触发器。

4

0 回答 0