Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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&;春天_Java_Spring_Hibernate_Spring Mvc_Jpa - Fatal编程技术网

Java 瞬态域实例jpa&;春天

Java 瞬态域实例jpa&;春天,java,spring,hibernate,spring-mvc,jpa,Java,Spring,Hibernate,Spring Mvc,Jpa,我的域对象大致如下: @Entity public class Customer{ @Id private String id; private String name; @OneToMany(cascade=CascadeType.ALL) private List<Account> accountList; } @Entity public class Account{ @Id private String id;

我的域对象大致如下:

@Entity
public class Customer{
    @Id
    private String id;
    private String name;
    @OneToMany(cascade=CascadeType.ALL)
    private List<Account> accountList;
}

@Entity
public class Account{
    @Id
    private String id;
    private String name;
    @OneToMany
    private List<Service> serviceList;
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(nullable=false)
    private Customer customer;
}

@Entity
public class Service{
    @Id
    private String id;
    private String name;
    @ManyToOne
    @JoinColumn(nullable=false)
    private Account account;
}
@实体
公共类客户{
@身份证
私有字符串id;
私有字符串名称;
@OneToMany(级联=级联类型.ALL)
私人名单;
}
@实体
公共类帐户{
@身份证
私有字符串id;
私有字符串名称;
@独身癖
私有列表服务列表;
@多通(级联=级联类型.ALL)
@JoinColumn(nullable=false)
私人客户;
}
@实体
公务舱服务{
@身份证
私有字符串id;
私有字符串名称;
@许多酮
@JoinColumn(nullable=false)
私人帐户;
}
我有一个事务性的Spring服务。我想将帐户实例返回到fronthand,但由于bandwith问题,我不想发送客户和服务列表信息

当我这样做时: account.setServiceList(空); 它没有给出错误,但过了一段时间,它删除了我的所有服务列表

当我这样做时: account.setCustomer(空); 它表示帐户的客户id不能为空

我只想返回一个没有验证的瞬态实例。我该怎么办

  • 问题的解决方案是通过调用
    entityManager.detach(accountInstance)
    (或者
    entityManager.clear()
    (如果您使用JPA 1.0分离所有实体),并仅对其进行任何更改,使实体分离。如果使用Hibernate的会话,请使用该方法
  • 另一种解决方案是使用DTO,它只包含所需的字段
  • PS:我认为您有一个bug,在该bug中,
    mapped
    属性的一侧缺少双向关系。例如,在
    Customer
    中,您应该有

    @OneToMany(cascade=CascadeType.ALL, mappedBy="customer")
    private List<Account> accountList;
    
    @OneToMany(cascade=CascadeType.ALL,mappedBy=“customer”)
    私人名单;
    

    其他关系也一样。

    首先感谢您的快速回答。关于mappedBy,我有,但我忘了在这里写。关于分离,这似乎是我需要的,但问题是我没有使用entityManager,而是使用sessionFactory。org.hibernate.sessionfactory也有类似的功能吗?是的,当然可以:我更新了一点我的答案以反映这一点。目前我无法测试,因为我们的服务器已关闭:(但请确保我接受这一功能)。