SQL Server Expressデータベースに偽のデータを挿入しようとしています。私は次のように上記のクラスを作成するには、エンティティ・マネージャを呼び出しJPAのIDENTITY_INSERT
@Entity
@Table(name = "People")
public class Peeps implements Serializable {
@Id
@Column(name = "ID", columnDefinition = "Decimal(10,0)")
private String id;
@Column(name = "PERSON_NAME")
private String name;
}
:私はこのようないくつかの簡単なコードを使用しています
private EntityManager em = createManager();
private EntityTransaction utx = em.getTransaction();
final Peeps entity = new Peeps();
entity.setId("10002");
entity.setName("Joe");
utx.begin();
em.persist(entity);
utx.commit();
これを行うときしかし、私はエラーを取得する::
em.createNativeQuery("SET IDENTITY_INSERT People ON").executeUpdate();
em.persist(entity);
em.createNativeQuery("SET IDENTITY_INSERT People OFF").executeUpdate();
:私はやってみましたので、何
Cannot insert explicit value for identity column in table 'People' when IDENTITY_INSERT is set to OFF
はこのようなものです
しかし、私はまだ同じエラーが発生します。私の直感は、接続が共有されていないと私に信じさせる。冬眠を指示するために何かできることがありますか?IDENTITY_INSERT〜ON私は持続性を呼び出す前に?
エンティティの識別子を明示的に設定する必要があるのはなぜですか?また、データベースでそれを処理できるようにするだけの理由はありますか? – Naros
@Naros正直なところ、私のロジックを見ても、私のエンティティは決して実動コードでデータベースに書き込まれません。したがって、デフォルト戦略では、データベースが手動で識別子を入力する必要があります。これを念頭に置いて、この@GeneratedValue(strategy = GenerationType.IDENTITY)をエンティティに追加して、テーブルがそのIDを生成し、コミットした後にそのIDをエンティティに戻すことができるようにしました。これは良い戦略だと思いますか? – angryip
関連する議論http://stackoverflow.com/questions/25746509/hibernate-nativequery-transaction –