我正在开发一个存储有关比赛数据的应用程序 . 我无法弄清楚如何将旧人实体(来自数据库)与我创建/保存的新竞赛联系起来 .
该程序将竞争作为输入并创建一个对象结构,并使用JPA / Hibernate将其保存到数据库中 . 所以问题是如何创建人与轨道之间的多对多关系,并且能够控制人物对象中哪些数据应该保留,如果是差异并且可能做其他一些事情 .
我用spring和Jaxon创造了新的比赛 .
Person Object:
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO) // SEQUENCE
private long id;
@JsonIgnore
@ManyToMany(mappedBy = "persons", fetch = FetchType.LAZY)
public List<Track> tracks = new ArrayList<>();
@Column(nullable = false)
private String forName;
@Column(nullable = false)
private String sureName;
@Column(nullable = true)
private String yearOfBirth;
@Column(nullable = true, unique = true)
private String licensNumber;
@JsonIgnore
public void setTrack(Track track) {
tracks.add(track);
}
}
跟踪:
@Entity
@Table(name = "track")
public class Track{
@Id
@GeneratedValue(strategy = GenerationType.AUTO) // SEQUENCE
private long id;
@ManyToOne(fetch=FetchType.LAZY)
public Race race;
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(
name = "track_person",
joinColumns = { @JoinColumn(name = "track_id") },
inverseJoinColumns = { @JoinColumn(name = "person_id") }
)
private List<Person> persons = new ArrayList<>();
public void setPersons(List<Person> persons) {
System.out.println("persons is being set");
for(Person person: persons){
System.out.println("licens number" + person.getLicensNumber());
person.setTrack(this);
}
System.out.println("persons set end");
this.persons = new ArrayList<>(persons);
}
}
库:
public interface TrackRepository extends CrudRepository<Track, Long> {
Optional<Track> findOne(long id);
}
如何保存:
TrackRepository.save(Track);
我删除了一些图层,所以它只显示Track,但在实际应用中它是一个包含Tracks的竞赛对象 .