2011-12-27 2 views
0

私はpostgres dbにレコードを挿入しようとしていますが、挿入は失敗します。休止状態のレコードを挿入する - postgres dbに春。シーケンスジェネレータの問題

データを選択しようとすると、選択が正常に動作しますので、私はその構成エラーを春、休止状態ではない

環境とします春3.1、3.6を休止、Postgresの9.1

ここでは私ですコード:

Entityクラス:

@Entity 
public class Person implements Serializable { 

    @Id 
    @Column(insertable=false, updatable=false) 
    @Type(type="java.lang.Long") 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="PERSON_SEQ") 
    @SequenceGenerator(name="PERSON_SEQ", sequenceName="PERSON_SEQ", allocationSize=1) 
    private Long id; 

    @Column 
    private String firstName; 
} 

マイダオ:

@Repository 
public class PersonDao extends BaseDao 
    public void insertPerson(){ 
    super.getHibernateTemplate().execute(new HibernateCallback() { 
     @Override 
     public Object doInHibernate(Session session) throws HibernateException, SQLException { 

      Person p = new Person(); 
      p.setFirstName("george");    
      session.persist(p); 
      return null; 
     } 
    }); 
} 
} 

は、アプリケーションがデプロイされた最初の時間で、新しいシーケンスはpostgresの

CREATE SEQUENCE person_seq 
    INCREMENT 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807 
    START 1 
    CACHE 1; 
    ALTER TABLE person_seq 
    OWNER TO postgres; 

で作成されたSQLのINSERT時の休止SQL出力は次のようになります。

Hibernate: 
select 
    nextval ('PERSON_SEQ') 
Hibernate: 
insert 
into 
    Person 
    (firstName, lastName, money, id) 
values 
    (?, ?, ?, ?) 

シーケンスが1だけインクリメントしても、レコードは挿入されません。

+1

トランザクション管理の設定ミスのようです。どのように構成されていますか? – axtavt

+0

例外スタックトレースはありますか?おそらく何らかの例外のために、どこかで起こっているロールバックです。または、トランザクションは読み取り専用として構成されます。 –

答えて

3

It loトランザクションのようなksはコミットされません。 トランザクションマネージャをSpringでコンフィグレーションしたか、サービスで@Transactionalを定義してinsertPersonを呼び出しましたか?