Problem Variant

This commit is contained in:
Struchkov Mark 2022-07-02 18:00:56 +03:00
parent 0077065d44
commit 57b0983003
4 changed files with 132 additions and 0 deletions

View File

@ -0,0 +1,31 @@
package dev.struchkov.example.hibernate.nbfe.problem;
import dev.struchkov.example.hibernate.nbfe.problem.domain.Post;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import java.util.List;
public class ProblemMain {
public static void main(String[] args) {
final EntityManagerFactory emf = Persistence.createEntityManagerFactory("Blog");
final EntityManager entityManager = emf.createEntityManager();
final List<Post> posts = entityManager.createQuery(
"""
SELECT p
FROM Post p
LEFT JOIN FETCH p.comments
LEFT JOIN FETCH p.tags
WHERE p.id BETWEEN :minId AND :maxId
""", Post.class
)
.setParameter("minId", 1L)
.setParameter("maxId", 50L)
.getResultList();
}
}

View File

@ -0,0 +1,57 @@
package dev.struchkov.example.hibernate.nbfe.problem.domain;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.OneToMany;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Setter
public class Post {
@Id
@GeneratedValue
private Long id;
private String title;
@OneToMany(
mappedBy = "post",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<PostComment> comments = new ArrayList<>();
@ManyToMany(
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
}
)
@JoinTable(
name = "post_tag",
joinColumns = @JoinColumn(name = "post_id"),
inverseJoinColumns = @JoinColumn(name = "tag_id")
)
private List<Tag> tags = new ArrayList<>();
public void addComment(PostComment postComment) {
postComment.setPost(this);
comments.add(postComment);
}
public void addTag(Tag tag) {
tags.add(tag);
}
}

View File

@ -0,0 +1,24 @@
package dev.struchkov.example.hibernate.nbfe.problem.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
public class PostComment {
@Id
@GeneratedValue
private Long id;
@ManyToOne
private Post post;
private String review;
}

View File

@ -0,0 +1,20 @@
package dev.struchkov.example.hibernate.nbfe.problem.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
public class Tag {
@Id
@GeneratedValue
private Long id;
private String name;
}