쿼리 구축을위한 jpa 1.0 유창 API/인터페이스가 있습니까? 저는 openjpa 1.x를 사용하고 있습니다. 그래서 JPA1에 붙어 있습니다.JPA 1.0 용 JPA 유창 API/Critera API가 있습니까? OpenJPA를 사용하고 있습니다.
QueryByProxy이 발견되었지만 메이븐 레포가 제대로 작동하지 않습니다.
쿼리 구축을위한 jpa 1.0 유창 API/인터페이스가 있습니까? 저는 openjpa 1.x를 사용하고 있습니다. 그래서 JPA1에 붙어 있습니다.JPA 1.0 용 JPA 유창 API/Critera API가 있습니까? OpenJPA를 사용하고 있습니다.
QueryByProxy이 발견되었지만 메이븐 레포가 제대로 작동하지 않습니다.
JPA 1.0이 설치된 경우 JPA 위에 유창한 typesafe API를 제공하는 Querydsl을 사용하는 것이 좋습니다. 1.6.0 이전 버전 (1.5.4) (1.6.0에서 JPA 2.0으로 전환)을 사용해야합니다. 이것은 최선의 선택입니다.
Querydsl은 JDO, Java 콜렉션, SQL 및 Lucene도 지원합니다. (내가 Querydsl 개발자 인 것처럼 편향된 의견) –
짧은 대답은 아니오입니다. 그러나 사용중인 공급자에 따라 다릅니다. 예를 들어 당신이 Hibernate를 사용한다면, 당신은 항상 Criteria API를 최대 절전으로부터 얻을 수있다. 그러나 JPA 1.0에서는이 기능이 지원되지 않습니다. 그러나 JPA 2.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);
});
그것은 (내 대답을 적어도) 정말 중요하지 않습니다하지만 당신은 (몸에) (제목) 최대 절전 모드를 혼합는 OpenJPA된다 . –
감사합니다. 향후 참조 용으로 편집하겠습니다. –