1
다음과 같은 상황을 가정합니다. Person 및 Comment의 두 엔티티 클래스가 있습니다.기준 API 또는 java.util.List contains() 메소드 사용?
//Person class
@Entity
public class Person extends AbstractBusinesObject{
@OneToMany(mappedby ="owner")
private List<Comment> comments;
//Comment class
@Entity
public class Comment extends AbstractBusinesObject{
@ManyToOne
private Person owner;
내가 특정 코멘트가 특정 사람이나하지에 속하는지 여부를 확인하려면 다음 두 가지 대안에서 (성능, 메모리 효율성) 더 나은하는 방법을 알고 싶습니다
.
public boolean isUsersComment(Person p, Comment c){
CriteriaBuilder cb = getEntitymanager().getCriteriaBuilder();
CriteriaQuery<Comment> cq = cb.createQuery(Comment.class);
Root<Comment> root = cq.from(Comment.class);
cq.select(root).where(cb.and(cb.equal(root, c), cb.isTrue(root.in(p.getComments())));
try{
getEntityManager().createQuery(cq).getSingleResult();
return true;
} catch (NoResultException ex){
return false;
} catch (NoUniqueResultException ex){
throw new IllegalStateException(message);
}
}
public boolean isUsersComment(Person p, Comment c){
return p.getComments().contains(c);
}
또는
은 내가 아는 한 기준 API는 데이터베이스 쿼리를 생성하는 컬렉션의 첫 번째 솔루션을 검색하는 동안.답장을 보내 주셔서 감사합니다.
ps : Criteria API를 처음 사용하므로 수정/제안 사항도 수락합니다.
편집
좋아, 내가 바보 같은 질문이었다 발견했다; 내가 양방향 관계를 선언,이 솔루션은 매우 간단합니다 :
어쨌든return c.getOwner.equals(p);
, 단방향 관계의 경우에 방법은 무엇인가?