Spring 数据 - 无法更新具有@ManyToOne 关系的实体
Spring Data - Can't update entity with @ManyToOne relations
我得到了一个简单的 SessionEntity:
public class SessionEntity {
...
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NonNull
@ManyToOne
@JoinColumn(name = "customer_id", nullable = false)
CustomerEntity customerEntity;
...
}
和CustomerEntity:
public class CustomerEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NonNull
private String territory;
@NonNull
private String code;
}
第一次交易后,我想使用以下方法用新的 CustomerEntity 数据更新 SessionEntity:
@Query("update SessionEntity session "
+ "set session.customerEntity =:customerEntity "
+ "where "
+ "session.id =:sessionId")
Option<SessionEntity> updateCustomerForSession(@Param("sessionId") String sessionId, @Param("customerEntity") CustomerEntity customerEntity);
但没有任何反应,在 Postgres 中,我得到的仍然是相同的 customer_id。此外,上面一级的方法是 public
和 @Transactional
(SessionRepository
- java class)。
这个解决方案有什么问题?
有两件事必须解决。首先,正如 Igor 提到的,我必须添加 @ Modifying
,其次,方法 updateCustomerForSession
必须 return int 或 void.
我得到了一个简单的 SessionEntity:
public class SessionEntity {
...
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NonNull
@ManyToOne
@JoinColumn(name = "customer_id", nullable = false)
CustomerEntity customerEntity;
...
}
和CustomerEntity:
public class CustomerEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NonNull
private String territory;
@NonNull
private String code;
}
第一次交易后,我想使用以下方法用新的 CustomerEntity 数据更新 SessionEntity:
@Query("update SessionEntity session "
+ "set session.customerEntity =:customerEntity "
+ "where "
+ "session.id =:sessionId")
Option<SessionEntity> updateCustomerForSession(@Param("sessionId") String sessionId, @Param("customerEntity") CustomerEntity customerEntity);
但没有任何反应,在 Postgres 中,我得到的仍然是相同的 customer_id。此外,上面一级的方法是 public
和 @Transactional
(SessionRepository
- java class)。
这个解决方案有什么问题?
有两件事必须解决。首先,正如 Igor 提到的,我必须添加 @ Modifying
,其次,方法 updateCustomerForSession
必须 return int 或 void.