Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 序列化JPA实体-仅保存获取实体的ID_Java_Jpa_Serialization_Jaxb - Fatal编程技术网

Java 序列化JPA实体-仅保存获取实体的ID

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

有两个实体:用户和员工。用户具有类型为Employee的字段

@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
在class
User
中注释属性
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; }
   ...
}