在许多来源中,我读过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;
//...
}员工语言SKill类:
@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提供程序,它没有给我任何例外。
我的问题是:
非常感谢你的帮助。
发布于 2011-04-19 16:07:38
JPA规范包含这样的要求(JSR-317 secion2.4主密钥和实体标识):
主键类必须是可序列化的。
如果EclipseLink真的没有强制执行这一要求,这是EclipseLink的实现细节,我建议您不要依赖它。
然而,对实体的可序列化性没有任何要求,但以下几个实体的可序列化性要求看起来更像是一项建议而不是一项要求:
如果要通过值将实体实例作为独立对象传递(例如,通过远程接口),则实体类必须实现可序列化接口。
发布于 2011-04-19 15:49:45
什么都不需要串行化,但似乎是由规范(10x到axtavt)对主键进行调整的,尽管对它没有直接的需求。
如果对象是通过线路传输或持久化到磁盘上,则需要序列化,因此我看不到该决定背后的原因。然而,你应该遵守它。
发布于 2016-08-08 07:27:37
主键类必须实现可序列化和复合-ID类必须实现可序列化是两个不同的问题。我将回答你们两个,并希望这将有助于你们区分和全面理解。
https://stackoverflow.com/questions/5719015
复制相似问题