-
Notifications
You must be signed in to change notification settings - Fork 0
/
Freelancer.java
93 lines (75 loc) · 3.51 KB
/
Freelancer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.netz00.hibernatesearch6example.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;
import org.hibernate.search.engine.backend.types.Aggregable;
import org.hibernate.search.engine.backend.types.Projectable;
import org.hibernate.search.engine.backend.types.Searchable;
import org.hibernate.search.engine.backend.types.Sortable;
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.*;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
@Table(name = "freelancer", uniqueConstraints = {@UniqueConstraint(columnNames = "username", name = "unq_username")})
@Indexed(index = "idx_freelancer")
public class Freelancer {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
@Column(name = "id")
@GenericField(name = "id", projectable = Projectable.YES, sortable = Sortable.YES, searchable = Searchable.NO, aggregable = Aggregable.NO)
private Long id;
@Column(name = "username")
@FullTextField(name = "username", analyzer = "edgeNgram", searchAnalyzer = "standard", projectable = Projectable.YES, searchable = Searchable.YES)
@KeywordField(name = "username_sort", normalizer = "lowercase", sortable = Sortable.YES)
private String username;
@Column(name = "first_name")
@FullTextField(name = "first_name", analyzer = "edgeNgram", searchAnalyzer = "standard", projectable = Projectable.YES, searchable = Searchable.YES)
@KeywordField(name = "first_name_sort", normalizer = "lowercase", sortable = Sortable.YES)
private String firstName;
@Column(name = "last_name")
@FullTextField(name = "last_name", analyzer = "edgeNgram", searchAnalyzer = "standard", projectable = Projectable.YES, searchable = Searchable.YES)
@KeywordField(name = "last_name_sort", normalizer = "lowercase", sortable = Sortable.YES)
private String lastName;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Comment> comments = new HashSet<>();
// Unidirectional
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "freelancer_categories", joinColumns = @JoinColumn(name = "freelancer_id"), inverseJoinColumns = @JoinColumn(name = "categories_id"))
@IndexedEmbedded(name = "categories", includePaths = {"title"})
private Set<Category> categories = new HashSet<>();
// Bidirectional
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "freelancer_projects", joinColumns = @JoinColumn(name = "freelancer_id"), inverseJoinColumns = @JoinColumn(name = "project_id"))
@JsonIgnoreProperties(value = {"freelancers"}, allowSetters = true)
private Set<Project> projects = new HashSet<>();
public Freelancer addComment(Comment comment) {
comments.add(comment);
return this;
}
public Freelancer removeComment(Comment comment) {
comments.remove(comment);
return this;
}
public Freelancer addCategory(Category category) {
categories.add(category);
return this;
}
public Freelancer removeCategory(Category category) {
categories.remove(category);
return this;
}
public Freelancer addProject(Project project) {
projects.add(project);
return this;
}
public Freelancer removeProject(Project project) {
projects.remove(project);
return this;
}
}