-
-
Save konstantinx/0fcedbb9dc0f05cc051b20eb330c82d3 to your computer and use it in GitHub Desktop.
Duplicate spring jpa
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Entity(name = "Tag") | |
@Table(name = "tag") | |
public class Tag { | |
@Id | |
@GeneratedValue | |
private Long id; | |
private String name; | |
@ManyToMany(mappedBy = "tags") | |
private Set<Post> posts = new HashSet<>(); | |
public Tag() {} | |
public Tag(String name) { | |
this.name = name; | |
} | |
//Getters and setters ommitted for brevity | |
public Long getId() { | |
return id; | |
} | |
public void setId(Long id) { | |
this.id = id; | |
} | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
public Set<Post> getPosts() { | |
return posts; | |
} | |
public void setPosts(Set<Post> posts) { | |
this.posts = posts; | |
} | |
@Override | |
public boolean equals(Object o) { | |
if (this == o) return true; | |
if (o == null || getClass() != o.getClass()) return false; | |
Tag tag = (Tag) o; | |
return Objects.equals(name, tag.name); | |
} | |
@Override | |
public int hashCode() { | |
return Objects.hash(name); | |
} | |
} | |
@Entity(name = "Post") | |
@Table(name = "post") | |
public class Post { | |
@Id | |
@GeneratedValue | |
private Long id; | |
private String title; | |
public Post() {} | |
public Post(String title) { | |
this.title = title; | |
} | |
@ManyToMany(cascade = { | |
CascadeType.PERSIST, | |
CascadeType.MERGE | |
}) | |
@JoinTable(name = "post_tag", | |
joinColumns = @JoinColumn(name = "post_id"), | |
inverseJoinColumns = @JoinColumn(name = "tag_id") | |
) | |
private Set<Tag> tags = new HashSet<>(); | |
//Getters and setters ommitted for brevity | |
public Long getId() { | |
return id; | |
} | |
public void setId(Long id) { | |
this.id = id; | |
} | |
public String getTitle() { | |
return title; | |
} | |
public void setTitle(String title) { | |
this.title = title; | |
} | |
public Set<Tag> getTags() { | |
return tags; | |
} | |
public void setTags(Set<Tag> tags) { | |
this.tags = tags; | |
} | |
public void addTag(Tag tag) { | |
tags.add(tag); | |
tag.getPosts().add(this); | |
} | |
public void removeTag(Tag tag) { | |
tags.remove(tag); | |
tag.getPosts().remove(this); | |
} | |
@Override | |
public boolean equals(Object o) { | |
if (this == o) return true; | |
if (!(o instanceof Post)) return false; | |
return id != null && id.equals(((Post) o).id); | |
} | |
@Override | |
public int hashCode() { | |
return 31; | |
} | |
} | |
Test: | |
Post post1 = new Post("JPA with Hibernate"); | |
Post post2 = new Post("Native Hibernate"); | |
Tag tag1 = new Tag("Java"); | |
Tag tag2 = new Tag("Hibernate"); | |
post1.addTag(tag1); | |
post1.addTag(tag2); | |
post2.addTag(tag1); | |
postRepository.save(post1); | |
postRepository.save(post2); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment