Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
未持久化Spring数据JPA实体更改_Spring_Jpa_Spring Data - Fatal编程技术网

未持久化Spring数据JPA实体更改

未持久化Spring数据JPA实体更改,spring,jpa,spring-data,Spring,Jpa,Spring Data,我有一个Spring数据实体(使用JPA w/Hibernate和MySQL),定义如下: @Entity @Table(name = "dataset") public class Dataset { @Id @GenericGenerator(name = "generator", strategy = "increment") @GeneratedValue(generator = "generator") private Long id; @Co

我有一个Spring数据实体(使用JPA w/Hibernate和MySQL),定义如下:

@Entity
@Table(name = "dataset")
public class Dataset {

    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @GeneratedValue(generator = "generator")
    private Long id;
    @Column(name = "name", nullable = false)
    private String name;
    @Column(name = "guid", nullable = false)
    private String guid;
    @Column(name = "size", nullable = false)
    private Long size;
    @Column(name = "create_time", nullable = false)
    private Date createTime;
    @OneToOne(optional = false)
    @JoinColumn(name = "created_by")
    private User createdBy;
    @Column(name = "active", nullable = false)
    private boolean active;
    @Column(name = "orig_source", nullable = false)
    private String origSource;
    @Column(name = "orig_source_type", nullable = false)
    private String origSourceType;
    @Column(name = "orig_source_org", nullable = false)
    private String origSourceOrg;
    @Column(name = "uri", nullable = false)
    private String uri;
    @Column(name = "mimetype", nullable = false)
    private String mimetype;
    @Column(name = "registration_state", nullable = false)
    private int registrationState;
    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
    @JoinColumn(name = "dataset_id")
    @JsonManagedReference
    private List<DatasetFile> datasetFiles;

谢谢

您需要用
@Transactional
注释请求映射的方法

为什么??如果要修改内存中的对象,然后在数据库中透明地更新该对象,则需要在活动事务中执行该操作

不要忘记您正在使用JPA(
spring data
正在使用
JPA
),如果您希望您的实体将处于
托管状态,您需要一个活动事务

见:

从中检索到实体对象后进行透明更新 数据库(无论以哪种方式)可以在内存中简单地修改它 从活动事务内部:

Employee employee = em.find(Employee.class, 1);

em.getTransaction().begin();
employee.setNickname("Joe the Plumber");
em.getTransaction().commit();

您需要使用
@Transactional
注释请求映射的方法

为什么??如果要修改内存中的对象,然后在数据库中透明地更新该对象,则需要在活动事务中执行该操作

不要忘记您正在使用JPA(
spring data
正在使用
JPA
),如果您希望您的实体将处于
托管状态,您需要一个活动事务

见:

从中检索到实体对象后进行透明更新 数据库(无论以哪种方式)可以在内存中简单地修改它 从活动事务内部:

Employee employee = em.find(Employee.class, 1);

em.getTransaction().begin();
employee.setNickname("Joe the Plumber");
em.getTransaction().commit();

因此,我相当肯定,从Spring数据查询返回的实体没有得到管理(至少不是我想象的那样)。如果运行
entityManager.contains(dataset)
,则返回
false
。我可以通过运行合并更改的
datasetRepo.save(dataset)
来持久化更改,但是,有人能告诉我为什么查询返回的实体没有被管理,以及我如何管理它吗?试着将您的方法
storeDataset
注释为
@Transactional
,您应该打开hibernate查询日志,看看封面下发生了什么。@PauChorro您指的是什么方法?我的代码中没有
storeDataset
方法。我想说的是,您是请求映射
storeDataset
,但它也是一种方法!:)因此,我相当肯定,从Spring数据查询返回的实体没有得到管理(至少不是我想象的那样)。如果运行
entityManager.contains(dataset)
,则返回
false
。我可以通过运行合并更改的
datasetRepo.save(dataset)
来持久化更改,但是,有人能告诉我为什么查询返回的实体没有被管理,以及我如何管理它吗?试着将您的方法
storeDataset
注释为
@Transactional
,您应该打开hibernate查询日志,看看封面下发生了什么。@PauChorro您指的是什么方法?我的代码中没有
storeDataset
方法。我想说的是,您是请求映射
storeDataset
,但它也是一种方法!:)
Employee employee = em.find(Employee.class, 1);

em.getTransaction().begin();
employee.setNickname("Joe the Plumber");
em.getTransaction().commit();