У меня есть 2 следующих объекта:
@Entity(name = "Employee")
@Table(name = "EMPLOYEE")
public class Employee implements Serializable {
@Id
@Column(name = "EMP_ID", insertable = true, updatable = false, nullable = false)
private int id;
и
@Entity(name = "Draw")
@Table(name = "DRAW")
public class Draw extends AuditableEntity {
@Id
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "EMP_ID", referencedColumnName = "EMP_ID")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.MERGE})
private Employee employee = null;
Скажем так, они хотят, чтобы это было смоделировано. Как указано, это отношение OneToOne. Однако когда я иду на тест, я получаю следующую ошибку:
вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем 'sessionFactory', определенным в ресурсе пути к классу [META-INF / spring / datasource-context.xml]: не удалось вызвать метод инициализации; вложенное исключение - org.hibernate.MappingException: класс составного идентификатора должен реализовывать Serializable: com.myprojects.tet.data.entity.Draw
Почему ключ employee
в Draw
интерпретируется как составной идентификатор? Также как мне исправить эту ошибку. Я прочитал, что указанный объект должен быть сериализуемым, но также необходимо реализовать методы equals
и hashCode
(которые я еще не реализовал). Должна ли реализация этих двух исправлений исправить эту ошибку?
Редактирование для ясности:
У меня есть две смоделированные таблицы: EMPLOYEE
и DRAW
:
EMPLOYEE
содержит: целое число emp_id
и множество других столбцов.
DRAW
имеет: целое emp_id
, целое totalPoints
.
Таблица рисования будет заполняться и очищаться каждый раз, поэтому столбец totalPoint
не может находиться в таблице EMPLOYEE
. Я не уверен, верны ли отношения между объектами (т.е. сущность employee
в качестве идентификатора для draw
).