我正在开发一个存储有关比赛数据的应用程序 . 我无法弄清楚如何将旧人实体(来自数据库)与我创建/保存的新竞赛联系起来 .

该程序将竞争作为输入并创建一个对象结构,并使用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的竞赛对象 .