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 lombok.Data;
26 import lombok.experimental.FieldNameConstants;
27 import net.sumaris.core.model.referential.IItemReferentialEntity;
28 import net.sumaris.core.model.referential.Status;
29 import net.sumaris.core.model.referential.gear.GearClassification;
30 import net.sumaris.core.model.referential.taxon.TaxonGroupType;
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.Objects;
38
39 @Data
40 @FieldNameConstants
41 @Entity
42 @Cacheable
43 public class Program implements IItemReferentialEntity {
44
45 @Id
46 @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PROGRAM_SEQ")
47 @SequenceGenerator(name = "PROGRAM_SEQ", sequenceName="PROGRAM_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 = IItemReferentialEntity.LENGTH_LABEL)
63 private String label;
64
65 @Column(nullable = false, length = IItemReferentialEntity.LENGTH_NAME)
66 private String name;
67
68 private String description;
69
70 @Column(length = IItemReferentialEntity.LENGTH_COMMENTS)
71 private String comments;
72
73 @OneToMany(fetch = FetchType.LAZY, targetEntity = Strategy.class, mappedBy = Strategy.Fields.PROGRAM)
74 @Cascade(org.hibernate.annotations.CascadeType.DELETE)
75 private List<Strategy> strategies = new ArrayList<>();
76
77 @OneToMany(fetch = FetchType.EAGER, targetEntity = ProgramProperty.class, mappedBy = ProgramProperty.Fields.PROGRAM)
78 @Cascade(org.hibernate.annotations.CascadeType.DELETE)
79 private List<ProgramProperty> properties = new ArrayList<>();
80
81 @ManyToOne(fetch = FetchType.LAZY, targetEntity = TaxonGroupType.class)
82 @JoinColumn(name = "taxon_group_type_fk", nullable = false)
83 private TaxonGroupType taxonGroupType;
84
85 @ManyToOne(fetch = FetchType.LAZY)
86 @JoinColumn(name = "gear_classification_fk", nullable = false)
87 private GearClassification gearClassification;
88
89 public int hashCode() {
90 return Objects.hash(label);
91 }
92 }