[ВВЕДЕНИЕ]
- База данных: Апач Дерби
- JPA: EclipseLink
Эй, я искал ответ, но не смог его найти, так что вот оно. Я пишу простое приложение для судоку, и следующая функция, которую я хотел бы добавить, — это сохранение моих досок судоку в базе данных и извлечение их, когда это необходимо. Вот диаграмма UML двух моих основных классов: SudokuBoard.uml Структура двух моих сущности следующие:
Объект SudokuBoard:
@Entity
public class SudokuBoard implements Serializable, Cloneable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private static final long serialVersionUID = 1L;
@OneToMany(cascade=CascadeType.PERSIST)
private ArrayList<SudokuField> board;
public ArrayList<SudokuField> board() {
return board;
}
public void setBoard(ArrayList<SudokuField> board) {
this.board= board;
}
public Long etId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
Объект SudokuField:
@Entity
public class SudokuField implements Serializable, Comparable<SudokuField>,
Cloneable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Transient
private static final Logger logger =
LoggerFactory.getLogger(SudokuField.class);
@Transient
private static final long serialVersionUID = 1L;
@Basic(fetch = FetchType.EAGER)
@Column(name = "Value")
private int value;
@ManyToOne
@JoinColumn(name = "board_fk", referencedColumnName = "id")
private SudokuBoard sudokuBoard;
Исполнение в DAO:
@Override
public void write(SudokuBoard obj, String path) throws
FileNotFoundException, IOException {
entityManager.getTransaction().begin();
entityManager.persist(obj);
entityManager.getTransaction().commit();
}
[ПРОБЛЕМА]
- Интересно, есть ли возможность не использовать автоматически сгенерированный ключ, а вместо этого использовать String как PK в объекте SudokuBoard. В моем приложении я реализовал привязку, поэтому я хотел бы сохранить один и тот же объект SudokuBoard, который со временем меняется под разными именами.
Надеюсь, я ясно изложил свои намерения. Спасибо за любую помощь и советы, как это можно сделать.