JPA сохраняет многозначную сущность, поскольку внешний ключ сохраняется - PullRequest
0 голосов
/ 17 марта 2019

У меня есть две сущности. Доска имеет много BoardVersion. BoardVersion имеет внешний ключ только для одной платы.

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"name"})})
public class Board implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false, nullable = false)
private Long id;

private String name;

@JsonIgnore
@OneToMany(mappedBy="board", fetch=FetchType.LAZY)
private Set<BoardVersion> boardVersions;

public Board(){

}

public Board(Long id, String name) {
    this.id = id;
    this.name = name;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Set<BoardVersion> getBoardVersions() {
    return boardVersions;
}

public void setBoardVersions(Set<BoardVersion> boardVersions) {
    this.boardVersions = boardVersions;
}

@Override
public String toString() {
    return "Board{" +
            "id=" + id +
            ", name='" + name + '\'' +
//                ", boardVersions=" + boardVersions +
            '}';
}
}

@Entity
public class BoardVersion implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false, nullable = false)
private Long id;

@Column(name="board_id")
private Long boardId;

private String major;

private String minor;

private String revision;

@ManyToOne
@JoinColumn(name = "board_id", nullable=false, 
insertable=false,  updatable=false)
private Board board;

public BoardVersion(){

}

public BoardVersion(Long id, String major, String minor, 
String revision,Long boardId) {
    this.id = id;
    this.major = major;
    this.minor = minor;
    this.revision = revision;
    this.boardId = boardId;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getMajor() {
    return major;
}

public void setMajor(String major) {
    this.major = major;
}

public String getMinor() {
    return minor;
}

public void setMinor(String minor) {
    this.minor = minor;
}

public String getRevision() {
    return revision;
}

public void setRevision(String revision) {
    this.revision = revision;
}

public Board getBoard() {
    return board;
}

public void setBoard(Board board) {
    this.board = board;
}

public Long getBoardId() {
    return boardId;
}

public void setBoardId(Long boardId) {
    this.boardId = boardId;
}
}

Я сохранил платы и версию платы через SpringDataJPA в базу данных.

Board b1 = new Board(new Long(1) "A");
Board b2 = new Board(new Long(2),"B");
repositoryBoard.save(b2);
repositoryBoard.save(b3);

BoardVersion bv1 = new BoardVersion(new Long(1), "1", "2", "1", new Long(1));
BoardVersion bv2 = new BoardVersion(new Long(2), "1", "2", "3", new Long(1));
repositoryBoardVersion.save(bv1);
repositoryBoardVersion.save(bv2);            

В таблице BoardVersion есть только одна строка.

Доска стола имя 1 А 2 B

BoardVersion id Major Minor Revision Board_id 1 1 2 1 1

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...