Hibernate Annotations Placement Question

J'ai obtenu ce que je pense que c'est une simple question. J'ai vu des exemples dans les deux sens. La question est "pourquoi ne puis-je placer mes annotations sur le terrain?". Laissez-moi vous donner un exemple....

@Entity
@Table(name="widget")
public class Widget {
 private Integer id;

 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 public Integer getId() { return this.id; }
 public Integer setId(Integer Id) { this.id = id;}
}

Le code ci-dessus fonctionne très bien (en supposant qu'il n'est pas une faute de frappe là). Lorsque l'annotation est placé sur le getter de la propriété, tout est parfait.

Cependant, qui semble gênant pour moi. Dans mon esprit c'est plus propre de placer l'annotation sur le terrain, comme --

@Entity
@Table(name="widget")
public class Widget {
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Integer id;

 public Integer getId() { return this.id; }
 public Integer setId(Integer Id) { this.id = id;}
}

J'ai vu des exemples de ces deux façons. Cependant, lorsque je lance ce second exemple, j'ai le...

java.lang.NullPointerException 
au com.widget.util.hibernate.HibernateSessionFactory$ThreadLocalSession.initialValue(HibernateSessionFactory.java:25) 
au com.widget.util.hibernate.HibernateSessionFactory$ThreadLocalSession.initialValue(HibernateSessionFactory.java:1) 
à java.lang.ThreadLocal$ThreadLocalMap.getAfterMiss(Source Inconnue) 
à java.lang.ThreadLocal$ThreadLocalMap.get(Source Inconnue) 
à java.lang.ThreadLocal$ThreadLocalMap.l'accès$000(Source Inconnue) 
à java.lang.ThreadLocal.get(Source Inconnue) 
au com.widget de.util.mise en veille prolongée.HibernateSessionFactory.get(HibernateSessionFactory.java:33) 
au com.widget de.db.dao.AbstractDao.(AbstractDao.java:12) 
au com.widget de.db.dao.WidgetDao.(WidgetDao.java:9) 
au com.widget de.db.dao.test.WidgetDaoTest.findById(WidgetDaoTest.java:17) 
au coucher du soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method) 
au coucher du soleil.de réfléchir.NativeMethodAccessorImpl.invoke(Source Inconnue) 
au coucher du soleil.de réfléchir.DelegatingMethodAccessorImpl.invoke(Source Inconnue) 
à java.lang.de réfléchir.La méthode.invoke(Source Inconnue) 
... 

Voici le squelette de HibernateSessionFactory (ligne 25 est marqué) ....

protected Session initialValue() {
    SessionFactory sessionFactory = null;
    try {
        Configuration cfg = new AnnotationConfiguration().configure();
        String url = System.getProperty("jdbc.url");
        if (url != null) {
            cfg.setProperty("hibernate.connection.url", url);
        }
        sessionFactory = cfg.buildSessionFactory();
    }
    catch (Exception e) {
    }

    Session session = sessionFactory.openSession();  //LINE 25
    return session;
}

Quelqu'un a une idée de ce qui se passe ici?

  • Peut-être que vous avalez une exception dans le bloc catch en ligne 22?
InformationsquelleAutor SteveT | 2008-11-20