【发布时间】:2021-09-06 03:08:14
【问题描述】:
所以我有两个实体:
@Getter
@Setter
@Entity
@Table(name = "MY_TABLE")
public class MyTable {
@Id
@Column(nullable = false, length = 18)
@SequenceGenerator(name = "MY_TABLE_seq", sequenceName = "MY_TABLE_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MY_TABLE_seq")
private long id;
@OneToOne(mappedBy = "myTable")
private MyTableView myTableView;
}
还有一个不可变实体(原因是它是一个数据库视图):
@Entity
@Getter
@Immutable
@Table(name = "MY_TABLE_VIEW")
public class MyTableView {
@Id
@Column(name = "ID", nullable = false, length = 18)
private Long id;
@OneToOne
@MapsId
@JoinColumn(name = "id")
private MyTable myTable;
}
更新和创建 MyTable 没有问题。当我尝试删除 MyTable 时,问题就开始了。我正在为此使用存储库:
public interface MyTableRepository extends CrudRepository<MyTable,Long> {
}
在我正在使用的服务中:
public void deleteMyTable(Long id){
/*fetch the my table enity*/
myTableRepository.delete(myTable);
}
什么都没有发生。一点也不例外。我尝试的是更改 @OneToOne 映射。具有不同的级联:
@OneToOne(mappedBy = "myTable",cascade = CascadeType.ALL)
@OneToOne(mappedBy = "myTable",cascade = CascadeType.DETACH)
@OneToOne(mappedBy = "myTable",cascade = CascadeType.MERGE)
@OneToOne(mappedBy = "myTable",cascade = CascadeType.REFRESH)
@OneToOne(mappedBy = "myTable",cascade = CascadeType.REMOVE)
@OneToOne(mappedBy = "myTable",cascade = CascadeType.PERSIST)
- ALL、MERGE 和 REMOVE 抛出异常,因为我无法从 查看
- DETACH、REFRESH 和 PERSIST 什么都不做,但 MyTable 实体不是 已移除
有人知道如何解决这个问题吗?
【问题讨论】:
-
你能去掉@Repository注解也可以把事务放到服务层吗? Spring data 自动为你扫描包。
-
@Gurkanİlleez 是的,我可以做到
-
我从您的代码中了解到,您尝试从表中删除并自动更新视图
-
@Gurkanİlleez :是的,这是正确的
-
@Gurkanİlleez :最后我希望能够删除表格并通过这样做来刷新视图。因为我无法从视图中删除
标签: java spring hibernate spring-data-jpa spring-data