1 package net.sumaris.core.model.administration.programStrategy;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import com.google.common.collect.Sets;
26 import lombok.Data;
27 import lombok.experimental.FieldNameConstants;
28 import net.sumaris.core.model.referential.IItemReferentialEntity;
29 import net.sumaris.core.model.referential.Status;
30 import net.sumaris.core.model.referential.gear.Gear;
31 import org.hibernate.annotations.Cascade;
32
33 import javax.persistence.*;
34 import java.util.ArrayList;
35 import java.util.Date;
36 import java.util.List;
37 import java.util.Set;
38
39 @Data
40 @FieldNameConstants
41 @Entity
42 @Table(name = "strategy")
43 public class Strategy implements IItemReferentialEntity {
44
45 @Id
46 @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "STRATEGY_SEQ")
47 @SequenceGenerator(name = "STRATEGY_SEQ", sequenceName="STRATEGY_SEQ")
48 private Integer id;
49
50 @ManyToOne(fetch = FetchType.LAZY)
51 @JoinColumn(name = "status_fk", nullable = false)
52 private Status status;
53
54 @Column(name = "creation_date", nullable = false)
55 @Temporal(TemporalType.TIMESTAMP)
56 private Date creationDate;
57
58 @Column(name = "update_date")
59 @Temporal(TemporalType.TIMESTAMP)
60 private Date updateDate;
61
62 @Column(nullable = false, length = 50)
63 private String label;
64
65 @Column(nullable = false, length = 100)
66 private String name;
67
68 private String description;
69
70 @Column(length = 2000)
71 private String comments;
72
73 @ManyToOne(fetch = FetchType.LAZY)
74 @JoinColumn(name = "program_fk", nullable = false)
75 private Program program;
76
77 @OneToMany(fetch = FetchType.LAZY, targetEntity = PmfmStrategy.class, mappedBy = PmfmStrategy.Fields.STRATEGY)
78 @Cascade(org.hibernate.annotations.CascadeType.DELETE)
79 private List<PmfmStrategy> pmfmStrategies = new ArrayList<>();
80
81 @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH)
82 @JoinTable(name = "strategy2gear", joinColumns = {
83 @JoinColumn(name = "strategy_fk", nullable = false, updatable = false) },
84 inverseJoinColumns = {
85 @JoinColumn(name = "gear_fk", nullable = false, updatable = false) })
86 private Set<Gear> gears = Sets.newHashSet();
87
88 @OneToMany(fetch = FetchType.LAZY, targetEntity = ReferenceTaxonStrategy.class, mappedBy = ReferenceTaxonStrategy.Fields.STRATEGY)
89 @Cascade(org.hibernate.annotations.CascadeType.DELETE)
90 private List<ReferenceTaxonStrategy> referenceTaxons = new ArrayList<>();
91
92 @OneToMany(fetch = FetchType.LAZY, targetEntity = TaxonGroupStrategy.class, mappedBy = TaxonGroupStrategy.Fields.STRATEGY)
93 @Cascade(org.hibernate.annotations.CascadeType.DELETE)
94 private List<TaxonGroupStrategy> taxonGroups = new ArrayList<>();
95
96 @OneToMany(fetch = FetchType.LAZY, targetEntity = AppliedStrategy.class, mappedBy = AppliedStrategy.Fields.STRATEGY)
97 @Cascade(org.hibernate.annotations.CascadeType.DELETE)
98 private List<AppliedStrategy> appliedStrategies = new ArrayList<>();
99
100 }