Tôi đã gặp phải một trường hợp khá kỳ lạ trong Java EE 6 khi sử dụng phương thức find
của JPA EntityManager cùng với id chính của thực thể trả về null, nhưng sử dụng tiêu chí API để chọn tất cả các thực thể có id đó hoạt động tốt.EntityManager.find không thể tìm thấy thực thể, nhưng sử dụng API tiêu chí không
Đây là mã Tôi đang sử dụng cho find
:
// Always returns null, even for records I know for sure are in there.
user = em.find(User.class, userId);
... và đây là đoạn code tôi đang sử dụng với các API Tiêu chí:
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();
Bất cứ ý tưởng tại sao find
lợi nhuận null nhưng tiêu chí tìm thấy người dùng? Tôi đã thử hai phương pháp thay thế này trong cùng một vị trí chính xác trong chương trình.
Sau đây là các phần có liên quan của các tổ chức tài:
@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;
}
...
}
Bạn không chắc chắn điều này có tạo nên sự khác biệt hay không, nhưng có phải userId là Dài hoặc có thể là Số nguyên trong mã của bạn không? –
Đó là một Long, tôi kiểm tra lại điều đó. – cdmckay
Tôi chỉ gặp vấn đề này với Hibernate 4.1.8.Final – molholm