2011-03-29 93 views
1

如何从Postgres序列中使用休眠中的主键? 我需要一次被自动生成,以及他们如何我能得到的序列值用于休眠从休眠序列中使用主键

这是我的代码

映射类

import java.io.Serializable; 
import java.util.Date; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.SequenceGenerator; 
import javax.persistence.Table; 
import javax.persistence.Temporal; 

@Entity 
@Table(name="ensaio") 
public class Ensaio implements Serializable { 

    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ensaio_seq") 
    @SequenceGenerator(name="ensaio_seq", sequenceName="ensaio_seq") 
    @Column(name="ensaio_id") 
    private long id; 
    private String nome; 
    @Column(nullable=false) 
    private String modelo; 
    private String site; 
    @Temporal(javax.persistence.TemporalType.DATE) 
    private Date datadoensaio; 
    private int qtdeFotos; 
    private String fotografo; 

    getter and setters... 
} 

吾道:

import java.util.List; 
import model.Ensaio; 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import util.hibernate.HibernateUtil; 

public class HEnsaioDAO { 

    private Session session; 
    private SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 

    public HEnsaioDAO() { 
    session = sessionFactory.openSession(); 
    } 

    public List<Ensaio> findAll(){ 
    Query query = session.createQuery("from Ensaio"); 
    return query.list(); 
    } 

    public void insertEnsaio(Ensaio ensaio){ 
    session.save(ensaio); 
    } 

    //testing insertion 
    public static void main(String[] args) { 
    Ensaio e = new Ensaio(); 
    e.setModelo("Roberta Maria"); 
    e.setSite("dsestudio"); 
    e.setFotografo("Jose Sobrero"); 
    e.setNome("Dama das camelias"); 

    HEnsaioDAO dao = new HEnsaioDAO(); 

    dao.insertEnsaio(e); 


    List<Ensaio> list = dao.findAll(); 
    for (Ensaio ensaio : list) { 
     System.out.println(ensaio.getModelo()); 
     System.out.println(ensaio.getNome()); 
     System.out.println(ensaio.getFotografo()); 
    } 
    } 

} 

数据库中没有任何反应(Postgres 8.3)。 什么问题? 谢谢

+0

使用hibernate.hbm2ddl.auto财产更新 – ulima69 2011-03-31 01:00:46

回答

3

您为您的id为sequence定义generator

Hibernate会为你处理id分配。入侵检测和发电机

更多信息,可以发现here

+0

不工作@mcabral的问题得到解决。 – ulima69 2011-03-31 00:06:03

+0

@ ulima69不起作用?获得的结果是什么?预期的结果是什么?帮助我帮助你:) – mcabral 2011-03-31 01:14:36