我在Java EE 6中遇到了一個相當奇怪的例子,其中使用JPA EntityManager的find
方法以及實體的主ID返回null,但使用Criteria API來選擇具有該ID的所有實體工作正常。EntityManager.find無法找到實體,但使用Criteria API確實
這裏是我使用find
代碼:
// Always returns null, even for records I know for sure are in there.
user = em.find(User.class, userId);
...這是我使用與標準API代碼:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> criteria = builder.createQuery(User.class);
Root<User> u = criteria.from(User.class);
TypedQuery<User> query = em.createQuery(
criteria.select(u).where(builder.equal(u.get("id"), userId)));
user = query.getSingleResult();
任何想法,爲什麼find
回報空但Criteria找到用戶?我在程序中完全相同的地方嘗試了這兩種替代方法。
下面是用戶實體的相關部分:
@Entity
@Table(name = "USERS")
@Access(AccessType.PROPERTY)
public class User implements Serializable {
...
private Long id;
...
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_generator")
@SequenceGenerator(name = "user_id_generator", sequenceName = "user_sequence", allocationSize = 1)
@Column(name="id")
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
...
}
不知道這是否有所作爲,但在代碼中是userId a Long還是Integer? – 2010-07-08 16:41:12
這是一個長,我仔細檢查。 – cdmckay 2010-07-08 18:18:12
我剛剛遇到了這個問題與休眠4.1.8.Final – molholm 2014-03-18 09:22:30