2013-11-20 5 views
0

Я начинаю работать в Hibernate и следую учебнику от javabrains. Но buildsessionfactory кажется устаревшим. Я искал и нашел solution.Извлечение объекта из спящего режима

Однако, когда я пытаюсь получить объект из базы данных, я получаю NullPointerException в sysout на последней строке, и никакая запись даже не сохраняется в базе данных. Но если я закомментирую раздел извлечения объекта, он отлично работает и сохраняет базу данных.

Что я делаю неправильно?

public class HibernateTest { 
     private static SessionFactory sessionFactory; 
     private static ServiceRegistry serviceRegistry; 

     private static SessionFactory configureSessionFactory() throws HibernateException { 
     Configuration configuration = new Configuration(); 
     configuration.configure(); 
     serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();   
     sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
     return sessionFactory; 
     } 

     public static void main(String[] args) { 
     UserDetails user = new UserDetails(); 
     user.setUserId(1); 
     user.setUserName("User's name"); 
     user.setAddress("Chingeltei"); 
     user.setJoinedDate(new Date()); 
     user.setDescription("Description of the user"); 

     Session session = configureSessionFactory().openSession(); 
     session.beginTransaction(); 
     session.save(user); 
     session.getTransaction().commit(); 
     session.close(); 

    // user = null; 
    // session = configureSessionFactory().openSession(); 
    // session.beginTransaction(); 
    // user = (UserDetails) session.get(UserDetails.class, 1); 

    // System.out.println("User name retreived is: "+user.getUserName()); 

     } 

    } 

UserDetails.java

import java.util.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 
import javax.persistence.Transient; 

@Entity 
@Table (name="user_details") 
public class UserDetails { 

    @Id 
    @Column (name="userid") 
    private int userId; 
    @Column (name="username") 
    private String userName; 
    @Temporal (TemporalType.DATE) 
    private Date joinedDate; 
    private String address; 
    @Transient 
    private String description; 

    public int getUserId() { 
     return userId; 
    } 
    public String getUserName() { 
     return userName; 
    } 
    public Date getJoinedDate() { 
     return joinedDate; 
    } 
    public String getAddress() { 
     return address; 
    } 
    public String getDescription() { 
    return description; 
    } 
    public void setUserId(int aUserId) { 
     userId = aUserId; 
    } 
    public void setUserName(String aUserName) { 
     userName = aUserName; 
    } 
    public void setJoinedDate(Date aJoinedDate) { 
     joinedDate = aJoinedDate; 
    } 
    public void setAddress(String aAddress) { 
     address = aAddress; 
    } 
    public void setDescription(String aDescription) { 
     description = aDescription; 
    } 
} 
+0

Можно ли увидеть 'UserDetails.java'? –

+0

Я добавил. что-нибудь ? – dono

+0

Не уверен в этом, но попробуйте 'sessionFactory.openSession()' вместо второго вызова 'configureSessionFactory()' (где вы забыли на данный момент. –

ответ

1

Как учебник состояний, вы должны создать sessionFactory один раз для каждого приложения. Итак, вместо второго вызова configureSessionFactory() вы должны использовать ссылку sessionFactory, которая уже существует.

Смежные вопросы