私は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
このエラーを解決しようとすると、シーケンスの使用に関する記事しか見つかりませんでしたが、シーケンスを使用したくないため、トリガーを使用する必要があります。