Persistence 为什么JPA-2.0主键类必须实现可序列化,而我的示例却没有实现?
在许多资料中,我读过PrimaryKey类,甚至JPA2实体都应该是可序列化的 在我的示例(遗留数据库)中,员工和语言之间存在一种关系: 员工类别:Persistence 为什么JPA-2.0主键类必须实现可序列化,而我的示例却没有实现?,persistence,jpa-2.0,java,Persistence,Jpa 2.0,Java,在许多资料中,我读过PrimaryKey类,甚至JPA2实体都应该是可序列化的 在我的示例(遗留数据库)中,员工和语言之间存在一种关系: 员工类别: @Entity @IdClass(EmpleadoId.class) @Table(name = "NO_INFGRAEMPL") public class Empleado { @Id @Column(name = "IGECOMPANIA", unique = true) private String compania;
@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;
//...
}
员工复合主密钥类:
public class EmpleadoId {
private String compania;
private String numeroIdentificacion;
//...
}
public class IdiomaEmpleadoId {
private EmpleadoId empleado;
private String idioma;
//...
}
员工语言技能课程:
@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 EmpleadoId {
private String compania;
private String numeroIdentificacion;
//...
}
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;
//...
}
我在J2SE应用程序下使用EclipseLink JPA2提供程序,它没有给我任何例外
我的问题是:
- 为什么它不给我例外?是否不强制要求可序列化
- 继续这样做安全吗?还是我应该明确实现serializable
- 在哪些类中?、JPA2实体或PrimaryKey类
非常感谢您的帮助。无需序列化任何内容,但规范(10x到axtavt)似乎对主键有要求,尽管没有直接的需求
如果对象通过网络传输或持久化到磁盘,则需要序列化,因此我看不出这一决定背后的原因。但是,您应该遵守它。JPA规范包含这样的要求(第2.4节主键和实体标识): 主键类必须是可序列化的 如果EclipseLink真的不执行此要求,那么这是EclipseLink的一个实现细节,我不建议您依赖它 但是,对实体的可序列化性没有任何要求,但以下要求看起来更像是建议而不是要求: 如果要通过值将实体实例作为分离对象传递(例如,通过远程接口),则 实体类必须实现可序列化接口
主键类必须实现可序列化,复合ID类必须实现可序列化是两个不同的问题。 我将回答你们两位,并希望这将有助于你们区分和全面理解