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