2010-08-06 3 views
4

쿼리 구축을위한 jpa 1.0 유창 API/인터페이스가 있습니까? 저는 openjpa 1.x를 사용하고 있습니다. 그래서 JPA1에 붙어 있습니다.JPA 1.0 용 JPA 유창 API/Critera API가 있습니까? OpenJPA를 사용하고 있습니다.

QueryByProxy이 발견되었지만 메이븐 레포가 제대로 작동하지 않습니다.

+1

그것은 (내 대답을 적어도) 정말 중요하지 않습니다하지만 당신은 (몸에) (제목) 최대 절전 모드를 혼합는 OpenJPA된다 . –

+0

감사합니다. 향후 참조 용으로 편집하겠습니다. –

답변

2

JPA 1.0이 설치된 경우 JPA 위에 유창한 typesafe API를 제공하는 Querydsl을 사용하는 것이 좋습니다. 1.6.0 이전 버전 (1.5.4) (1.6.0에서 JPA 2.0으로 전환)을 사용해야합니다. 이것은 최선의 선택입니다.

+1

Querydsl은 JDO, Java 콜렉션, SQL 및 Lucene도 지원합니다. (내가 Querydsl 개발자 인 것처럼 편향된 의견) –

0

짧은 대답은 아니오입니다. 그러나 사용중인 공급자에 따라 다릅니다. 예를 들어 당신이 Hibernate를 사용한다면, 당신은 항상 Criteria API를 최대 절전으로부터 얻을 수있다. 그러나 JPA 1.0에서는이 기능이 지원되지 않습니다. 그러나 JPA 2.0에서는 그렇습니다.

0

JPA와 Hibernate에서 유창한 인터페이스 패턴을 사용할 수 있습니다. 나는 an article which explains this topic in great detail이라고 썼다.

@Entity(name = "Post") 
@Table(name = "post") 
public class Post { 

    @Id 
    private Long id; 

    private String title; 

    public Post() {} 

    public Post(String title) { 
     this.title = title; 
    } 

    @OneToMany(
     cascade = CascadeType.ALL, 
     orphanRemoval = true, 
     mappedBy = "post" 
    ) 
    private List<PostComment> comments = new ArrayList<>(); 

    public Long getId() { 
     return id; 
    } 

    public Post setId(Long id) { 
     this.id = id; 
     return this; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public Post setTitle(String title) { 
     this.title = title; 
     return this; 
    } 

    public List<PostComment> getComments() { 
     return comments; 
    } 

    public Post addComment(PostComment comment) { 
     comment.setPost(this); 
     comments.add(comment); 
     return this; 
    } 
} 

@Entity(name = "PostComment") 
@Table(name = "post_comment") 
public class PostComment { 

    @Id 
    @GeneratedValue 
    private Long id; 

    private String review; 

    private Date createdOn; 

    @ManyToOne 
    private Post post; 

    public Long getId() { 
     return id; 
    } 

    public PostComment setId(Long id) { 
     this.id = id; 
     return this; 
    } 

    public String getReview() { 
     return review; 
    } 

    public PostComment setReview(String review) { 
     this.review = review; 
     return this; 
    } 

    public Date getCreatedOn() { 
     return createdOn; 
    } 

    public PostComment setCreatedOn(Date createdOn) { 
     this.createdOn = createdOn; 
     return this; 
    } 

    public Post getPost() { 
     return post; 
    } 

    public PostComment setPost(Post post) { 
     this.post = post; 
     return this; 
    } 
} 

이 방법, 당신은 부모와 같은 하위 개체를 구축 할 수 있습니다 :

당신이 최대 절전 모드를 사용하는 경우

은 그냥 개체를 반환하는 세터를 수정할 수 있습니다, 그것을 요약하면

0 : 당신은 JPA 이동성을 걱정하면
doInJPA(entityManager -> { 
    Post post = new Post() 
    .setId(1L) 
    .setTitle("High-Performance Java Persistence") 
    .addComment(
     new PostComment() 
     .setReview("Awesome book") 
     .setCreatedOn(Timestamp.from(
      LocalDateTime.now().minusDays(1).toInstant(ZoneOffset.UTC)) 
     ) 
    ) 
    .addComment(
     new PostComment() 
     .setReview("High-Performance Rocks!") 
     .setCreatedOn(Timestamp.from(
      LocalDateTime.now().minusDays(2).toInstant(ZoneOffset.UTC)) 
     ) 
    ) 
    .addComment(
     new PostComment() 
     .setReview("Database essentials to the rescue!") 
     .setCreatedOn(Timestamp.from(
      LocalDateTime.now().minusDays(3).toInstant(ZoneOffset.UTC)) 
     ) 
    ); 
    entityManager.persist(post); 
}); 

, 당신은 당신이 정규 세터 함께 유창함 인터페이스 메소드를 추가해야하는 경우 자바 콩 사양을 위반하지 않을 수 있습니다 123,

엔티티 건물은 이전과 거의 동일합니다 :

doInJPA(entityManager -> { 
    Post post = new Post() 
    .id(1L) 
    .title("High-Performance Java Persistence") 
    .addComment(new PostComment() 
     .review("Awesome book") 
     .createdOn(Timestamp.from(
      LocalDateTime.now().minusDays(1).toInstant(ZoneOffset.UTC)) 
     ) 
    ) 
    .addComment(new PostComment() 
     .review("High-Performance Rocks!") 
     .createdOn(Timestamp.from(
      LocalDateTime.now().minusDays(2).toInstant(ZoneOffset.UTC)) 
     ) 
    ) 
    .addComment(new PostComment() 
     .review("Database essentials to the rescue!") 
     .createdOn(Timestamp.from(
      LocalDateTime.now().minusDays(3).toInstant(ZoneOffset.UTC)) 
     ) 
    ); 
    entityManager.persist(post); 
});