我有一个我认为很简单的问题。我已经看到了两种方式的例子。问题是 - “为什么我不能将我的注释放在字段上?”。让我给你举个例子....
@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;}
}
上面的代码工作正常(假设那里没有错字)。当注释放在属性的 getter 上时,一切都很完美。
然而,这对我来说似乎很尴尬。在我看来,将注释放在字段上会更干净,就像这样 -
@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;}
}
我已经看到了这两种方式的例子。但是,当我运行第二个示例时,我得到以下...
java.lang.NullPointerException 在 com.widget.util.hibernate.HibernateSessionFactory$ThreadLocalSession.initialValue(HibernateSessionFactory.java:25) 在 com.widget.util.hibernate.HibernateSessionFactory$ThreadLocalSession.initialValue(HibernateSessionFactory.java:1) 在 java.lang.ThreadLocal$ThreadLocalMap.getAfterMiss(未知来源) 在 java.lang.ThreadLocal$ThreadLocalMap.get(未知来源) 在 java.lang.ThreadLocal$ThreadLocalMap.access$000(未知来源) 在 java.lang.ThreadLocal.get(未知来源) 在 com.widget.util.hibernate.HibernateSessionFactory.get(HibernateSessionFactory.java:33) 在 com.widget.db.dao.AbstractDao.(AbstractDao.java:12) 在 com.widget.db.dao.WidgetDao.(WidgetDao.java:9) 在 com.widget.db.dao.test.WidgetDaoTest.findById(WidgetDaoTest.java:17) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) ...
HibernateSessionFactory
这是(标记第 25 行)的骨架......
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;
}
有人知道这里发生了什么吗?