1

EntityManager.persist() 関数は既存のレコードを更新しようとしていますが、常に新しいレコードを挿入する必要があります。これを達成する方法は?

エンティティ Bean の一部:

@Entity
@Table(name="SYNC_TRIGGER", schema="ETL")
public class SyncTrigger implements Serializable {

    @Id
    @Column(name="ID")
    @SequenceGenerator(name = "TRIGGER_SEQ", sequenceName = "ETL.TRIGGER_SEQ")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TRIGGER_SEQ")
    private Long triggerId;
......

レコードを永続化する Stateless Bean の一部:

@Stateless
public class TriggerPersister {

    @PersistenceContext(unitName="syncTriggerDS") 
    protected EntityManager entityManager;

    public <T extends GenericTrigger> void persistTrigger(SyncTrigger 
            st, T concreteTrigger){

            entityManager.persist(st);
.........

UPD: entityManager.persist(st) が実行される前は st.triggerId 値は null ですが、実行後 - 以前に追加されたレコードの ID がこのフィールドに割り当てられます。

4

1 に答える 1

3

EntityManager.persist()常に新しい管理対象オブジェクトを作成しようとします。EntityExistsException既に管理されているエンティティで呼び出すと、がスローされます。

更新に使用する必要がありmerge()ます。

両方の方法については、javadoc を参照してください。

于 2012-06-12T11:19:45.340 に答える