- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这些是我的实体;
@Entity
public class IpAddress{
@Id
@Column(nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
@Getter
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private final Application application;
.....
}
@Entity
public class Application{
@Column(nullable = false, updatable = false)
private final String applicationId;
@OneToMany(mappedBy = "application", cascade = CascadeType.ALL, orphanRemoval = true)
private List<IpAddress> ipAddresses = new ArrayList<>();
}
@Entity
public class MerchantApplication {
@Id
@Column(nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
@Getter
private Long id;
@OneToOne
private final Merchant merchant;
@OneToOne(cascade = CascadeType.ALL)
private final Application application;
@ManyToOne(fetch = FetchType.LAZY)
private final User user;
}
这是我尝试删除的服务方法:
@Transactional
public void deleteIpAddressForMerchant(Long merchantId,Long ipAddressId) {
Merchant merchant = merchantRepository.getMerchant(merchantId);
MerchantApplication merchantApplication = merchant.getMerchantApplication();
if (Objects.isNull(merchantApplication))
throw new ApplicationNotFoundException();
if (merchantApplication.getApplication().getIpAddresses().size() == 1) {
throw new IpAddressCannotBeDeleted();
}
IpAddress ipAddress = ipAddressRepository.getByIdAndApplication(ipAddressId, merchantApplication.getApplication());
ipAddressRepository.delete(ipAddress);
}
当我在服务方法中删除这个 block 时,它工作正常;
if (merchantApplication.getApplication().getIpAddresses().size() == 1) {
throw new IpAddressCannotBeDeleted();
}
但是这样不行,你能帮帮我吗,有什么问题吗?
最佳答案
如果您在 @Transactional
方法中获取具有 orphanRemoval = true
属性的实体字段,它将在该方法返回时保存此字段以及您对其所做的更改。
在你的例子中,你获取
merchantApplication.getApplication().getIpAddresses()
但是你没有对它进行任何更改,然后将获取的列表原样保存。
您可以在获取的列表中删除您想要删除的元素。
关于java - 获取特定列表后,Spring Jpa 删除操作不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425764/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!