用hibernate插入记录 - 在postgres db中弹出。序列生成器问题

时间:2011-12-27 14:03:06

标签: hibernate spring postgresql sequence

我试图在postgres数据库中插入记录但插入失败。

当尝试选择数据时,选择工作正常,所以我认为它不是spring-hibernate配置错误

环境: Spring 3.1,Hibernate 3.6,Postgres 9.1

这是我的代码:

实体类:

@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期间的hibernate sql输出是:

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

但它永远不会插入记录,即使序列增加1

1 个答案:

答案 0 :(得分:3)

看起来事务永远不会被提交。 您是否使用Spring配置了事务管理器,或者在调用insertPerson的服务上定义了@Transactional?