cdm*_*kay 7 hibernate java-ee criteria-api java-ee-6 jpa-2.0
我在Java EE 6中遇到了一个相当奇怪的情况,其中使用JPA EntityManager的find方法以及实体的主id返回null,但使用Criteria API选择具有该id的所有实体都可以正常工作.
这是我正在使用的代码find:
// Always returns null, even for records I know for sure are in there.
user = em.find(User.class, userId);
Run Code Online (Sandbox Code Playgroud)
...这里是我使用Criteria 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();
Run Code Online (Sandbox Code Playgroud)
任何想法为什么find返回null但Criteria找到用户?我在程序中的完全相同的位置尝试了这两种替代方法.
以下是User实体的相关部分:
@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;
}
...
}
Run Code Online (Sandbox Code Playgroud)
cdm*_*kay 11
我解决了这个问题.这是因为数据库中的某个字段null是不允许的.这是因为我手工编辑.在我向该字段添加值后,问题就消失了.
| 归档时间: |
|
| 查看次数: |
15151 次 |
| 最近记录: |