Java 序列化JPA实体-仅保存获取实体的ID
有两个实体:用户和员工。用户具有类型为Employee的字段Java 序列化JPA实体-仅保存获取实体的ID,java,jpa,serialization,jaxb,Java,Jpa,Serialization,Jaxb,有两个实体:用户和员工。用户具有类型为Employee的字段 @Entity @Table(name="user") public class User extends AuditableEntity { Long idUser; String username; String password; Employee employee; @Id @GeneratedValue(strategy = GenerationType.IDENTI
@Entity
@Table(name="user")
public class User extends AuditableEntity {
Long idUser;
String username;
String password;
Employee employee;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getIdUser() { return idUser; }
public void setIdUser(Long idUser) { this.idUser = idUser; }
@Column(name = "username")
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
@Column(name = "password")
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
@ManyToOne
@JoinColumn(name = "idemployee")
public Employee getEmployee() { return employee; }
public void setEmployee(Employee employee) { this.employee = employee; }
}
及
我需要将用户序列化为XML/JSON。我正在使用JAXB,但它也在序列化Employee:
<User>
<idUser>15</idUser>
<username>user15</username>
<password>password15</password>
<employee>
<idEmployee>23</idEmployee>
<surname>Smith</surname>
<name>John</name>
<patronymic>H.</patronymic>
<birthdate>01.01.1970</birthdate>
</employee>
<User>
15
用户15
密码15
23
史密斯
约翰
H
01.01.1970
我需要这样的结果:
<User>
<idUser>15</idUser>
<username>user15</username>
<password>password15</password>
<idEmployee>23</idEmployee>
<User>
15
用户15
密码15
23
我尝试使用@XmlID、@XmlIDREF,但它只能用于stringid列。
还尝试使用@XmlTransient,但它只排除了Employee。
如何序列化用户而不使用Employee,而只使用IDEEmployee
第二个问题是反序列化。有什么标准方法可以做到这一点吗?用
@xmltransive
在classUser
中注释属性employee
。此注释可以应用于字段或其getter。您可以将员工id的其他getter添加到用户
实体
public class User
{
...
@Transient // for JPA
@XmlElement
Long getIdEmployee()
{
return employee.getIdEmployee();
}
}
或者您可以使用@XmlValue
public class User
{
...
@XmlElement(name = "idEmployee")
public Employee getEmployee() { return employee; }
public void setEmployee(Employee employee) { this.employee = employee; }
}
@XmlAccessorType(XmlAccessType.NONE) // to prevent marshalling of all properies
public class Employee
{
...
@XmlValue
public Long getIdEmployee() { return idEmployee; }
...
}
这不包括整个字段。但我需要保存员工的身份证。
public class User
{
...
@XmlElement(name = "idEmployee")
public Employee getEmployee() { return employee; }
public void setEmployee(Employee employee) { this.employee = employee; }
}
@XmlAccessorType(XmlAccessType.NONE) // to prevent marshalling of all properies
public class Employee
{
...
@XmlValue
public Long getIdEmployee() { return idEmployee; }
...
}