我用 OneToOne
在 spring data JPA
我想从数据库中删除一条记录 Address
不接触用户的table。但我不能。
如果我移除 User
,在这种情况下 Address
被移除了,很好。
但是你怎么能删除一个 Address
不碰地板 User
?
https://github.com/mytestpercon/testcascade
用户.java
@Entity
@Table(name = "user", schema = "testCascade")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private Address address;
// Getter and Setter ...
}
地址.java
@Entity
@Table(name = "address", schema = "testCascade")
public class Address implements Serializable {
@Id
private Long id;
@Column(name = "city")
private String city;
@OneToOne
@MapsId
@JoinColumn(name = "id")
private User user;
// Getter and Setter ...
}
删除控制器.java
@Controller
public class DeleteController {
@Autowired
ServiceJpa serviceJpa;
@GetMapping(value = "/deleteAddressById")
public String deleteAddressById () {
serviceJpa.deleteAddressById(4L);
return "redirect:/home";
}
}
3条答案
按热度按时间ha5z0ras1#
重命名
@JoinColumn(name = "id")
至@JoinColumn(name = "user_id")
不能说指向user的列就是地址的idbogh5gae2#
你把Map弄错了这就是问题所在。
试试下面的,看看
用户.java
地址.java
aurhwmvo3#
为了解决这个问题,您需要阅读hibernate文档hibernate
Example 162
,Example 163
,Example 164
.另外,我建议您在springdatajpa中使用@primarykeyjoincolumn注解
这有助于我解决这个问题。
而且还需要指定参数
orphanRemoval = true
用户.java地址.java
deletecontroller.java文件
或进行自定义sql查询。