我正在使用Java JPA处理我的第一个API项目。
该项目基于三个表(事件,阶段,evt_phases); event表示发布数据,phase表示预设的事件阶段,evt_phases链接阶段与事件,包含两个名为start
和end
的字段;这些字段包含阶段的开始日期(时间)和结束日期(时间)。
这就是我创建数据库表的方法,问题是我目前有一个API,它返回包含
event
数组的phases
contains属性,并且我想要包含start
}和end
从evt_phase
表格到phases
。
@Entity()
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public
Long id;
String name;
@Column(name = "short_desc")
String short_description;
@Column(name = "long_desc")
String long_description;
@OneToMany()
@JoinTable(name = "evt_phase", joinColumns = @JoinColumn(name = "event_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "phase_id", referencedColumnName = "id"))
Set<Phase> phases = new HashSet<>();
@OneToMany()
@JoinTable(name = "evt_resource", joinColumns = @JoinColumn(name = "event_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "resource_id", referencedColumnName = "id"))
Set<Resource> resources = new HashSet<>();
String place;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setShort_description(String short_description) {
this.short_description = short_description;
}
public String getShort_description() {
return short_description;
}
public void setLong_description(String long_description) {
this.long_description = long_description;
}
public String getLong_description() {
return long_description;
}
public void setPlace(String place) {
this.place = place;
}
public String getPlace() {
return place;
}
public void setPhases(Set<Phase> phases) {
this.phases = phases;
}
public Set<Phase> getPhases() {
return phases;
}
public void setResources(Set<Resource> resources) {
this.resources = resources;
}
public Set<Resource> getResources() {
return resources;
}
}
这是我写的phase
实体
@Entity()
public class Phase {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String name;
@Column(name = "color")
String backColor;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setBackColor(String backColor) {
this.backColor = backColor;
}
public String getBackColor() {
return backColor;
}
}
最后,这是中间表
@Entity()
@Table(name = "evt_phase")
public class EventPhase {
@Id()
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
@ManyToOne()
private Phase phase;
@ManyToOne()
private Event event;
@Column(name = "start")
LocalDateTime startDate;
@Column(name = "end")
LocalDateTime endDate;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setPhase(Phase phase) {
this.phase = phase;
}
public Phase getPhase() {
return phase;
}
public void setEvent(Event event) {
this.event = event;
}
public Event getEvent() {
return event;
}
public void setStartDate(LocalDateTime startDate) {
this.startDate = startDate;
}
public LocalDateTime getStartDate() {
return startDate;
}
public void setEndDate(LocalDateTime endDate) {
this.endDate = endDate;
}
public LocalDateTime getEndDate() {
return endDate;
}
}
答案 0 :(得分:0)
为什么不在EventPhase
实体中引入Event
和@Entity
public class Event {
...
@OneToMany(mappedBy = "event")
Set<EventPhase> eventPhases = new HashSet<>();
}
之间的关系:
Set<Phase>
您甚至可以放弃Event
关系,只需使用上述关系作为从Phase
遍历到let stringDouble = String(describing: double)
的方法,除非您有某种原因需要直接链接。它没有任何伤害,如果你需要,它显然是一个捷径。