EntityManager.finden Sie nicht finden können, Entität, sondern anhand der Kriterien API

Den ich gestoßen bin einen etwas ungewöhnlichen Fall, der in Java EE 6, wo mit dem JPA EntityManager ist find - Methode zusammen mit einer Entität primär-id null zurückgibt, sondern anhand der Kriterien-API, um alle Elemente auszuwählen, die mit dieser id funktioniert einwandfrei.

Hier ist der code, den ich verwende für find:

//Always returns null, even for records I know for sure are in there.
user = em.find(User.class, userId);

...und hier ist der code, den ich verwende, der die Kriterien 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();

Jede Idee, warum find gibt null zurück, sondern Kriterien findet der Nutzer? Ich habe versucht, diese zwei Alternative Methoden in der exakt gleichen Stelle im Programm.

Hier sind die relevanten Teile der Entität " Benutzer:

@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;
    }
    ...
}
  • Nicht sicher, ob dies einen Unterschied macht, aber die userId ist eine Lange-oder vielleicht eine ganze Zahl im code?
  • Es ist ein Langer, ich doppelt überprüft, dass.
  • Ich habe gerade erlebt, dieses Problem mit Hibernate 4.1.8.Final
InformationsquelleAutor cdmckay | 2010-07-08
Schreibe einen Kommentar