이것은 JPA2 (EclipseLink) 및 JSF2에 있습니다.왜 entityManager.contains가 다른 결과를 반환합니까?
@Entity
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstname;
private String lastname;
private int age;
public Student(String firstname, String lastname, int age) {
this.firstname = firstname;
this.lastname = lastname;
this.age = age;
}
public Student() {
}
// accessors and mutators here
}
세션 빈 StudentFacade AbstractFacade 상속 :
public abstract class AbstractFacade<T> {
private Class<T> entityClass;
public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void create(T entity) {
getEntityManager().persist(entity);
}
public T edit(T entity) {
return getEntityManager().merge(entity);
}
public void remove(T entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
// other methods: findAll, findRange, count
}
@Stateless
public class StudentFacade extends AbstractFacade<Student> {
@PersistenceContext(unitName = "jpa2testsPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public StudentFacade() {
super(Student.class);
}
public boolean contains(Student s) {
return getEntityManager().contains(s);
}
public void testContains() {
Student s = find(1L);
boolean isContains = getEntityManager().contains(s);
}
}
이것은 내 JSF가 관리하는 빈 :
@ManagedBean
@RequestScoped
public class IndexController {
@EJB
private StudentFacade studentFacade;
/**
* Creates a new instance of IndexController
*/
public IndexController() {
}
public String test() {
Student s = new Student("John", "Doe", 20);
studentFacade.create(s);
Student s1 = studentFacade.find(1L); // This works because table only has 1 record
boolean isContains = studentFacade.contains(s);
return null;
}
}
내가 실행 테스트
나는 엔티티 클래스의 학생이() 관리 Bean에서 isContains는 false입니다. 그러나 StudentFacade의 testContains()가 호출되면 isContains가 true입니다. 왜 이런거야?
StudentFacade.contains()의 구현을 표시 할 수 있습니까? StudentFacade.containsStudent()는 포함하지만 contains()는 표시되지 않습니다. 잘못 되었습니까? –
예. 오타가 있습니다. – Cam