Во многих источниках я читал классы PrimaryKey, и даже сущности JPA2 должны быть сериализуемыми.
В моем примере (устаревшая база данных) существует связь между сотрудником и языками:
Класс работника:
@Entity
@IdClass(EmpleadoId.class)
@Table(name = "NO_INFGRAEMPL")
public class Empleado {
@Id
@Column(name = "IGECOMPANIA", unique = true)
private String compania;
@Id
@Column(name = "IGENUMEROIDENTIFIC", unique = true)
private String numeroIdentificacion;
//...
}
Соединение сотрудников PrimaryKey Класс:
public class EmpleadoId {
private String compania;
private String numeroIdentificacion;
//...
}
Уровень владения языком сотрудника:
@Entity
@IdClass(IdiomaEmpleadoId.class)
@Table(name = "NO_IDIOMEMPLE")
public class IdiomaEmpleado {
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(value = {
@JoinColumn(name= "IEMCOMPANIA", referencedColumnName = "IGECOMPANIA"),
@JoinColumn(name = "IEMEMPLEADO", referencedColumnName = "IGENUMEROIDENTIFIC")
})
private Empleado empleado;
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "IEMIDIOMA")
private Idioma idioma;
@Column(name = "IEMNIVELLECTURA")
private String nivelLectura;
//...
}
Соединение языковых навыков сотрудника PrimaryKey Класс:
public class IdiomaEmpleadoId {
private EmpleadoId empleado;
private String idioma;
//...
}
Языковой класс:
@Entity
@Table(name = "NO_IDIOMAS")
public class Idioma {
@Id
@Column(name = "IDICODIGO")
private String codigo;
@Column(name = "IDIDESCRIPCION")
private String descripcion;
//...
}
Я использую провайдер EclipseLink JPA2 в приложении J2SE, и он не дает никаких исключений.
Мои вопросы:
- Почему это не дает мне исключения? Разве не обязательно иметь Serializable?
- Безопасно ли продолжать этот путь или я должен определенно реализовать сериализуемый?
- В каких ?, сущностях JPA2 или классах PrimaryKey?
Большое спасибо за помощь.