作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个抽象类TreeNode
。我从他那里继承了类(class) Country
和Location
。然后我有课Role
其中包括预定义的角色,如管理员、用户等。这两个类在 MappedRole
中映射在一起。类(class)。 mappedRole 的数据库表具有treenode_id、role_id 和mappedRole_id 列。数据库中的表看起来很相似我有一个国家和位置表,因为我使用 Table_per_Class
创建 Treenode 。因此,MappedRole 表没有国家和位置的外键。mappedRole 中的treenode_id 列包含其映射到的类的id。 JPA 通过两个表上的大连接获取关系。
这是我的 MappedRole 类:
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "TREENODE_ID", "ROLE_ID" }) }, name = "mappedrole")
@NamedQueries({ @NamedQuery(name = "mappedRole.checkIfUserExist", query = "SELECT count(mr.role) FROM MappedRole mr WHERE mr.role =?1") })
public class MappedRole implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne(cascade = { CascadeType.REMOVE }, fetch = FetchType.EAGER)
@JoinColumn(name = "TREENODE_ID", nullable = false)
private TreeNode treeNode;
@ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH }, fetch = FetchType.EAGER)
@JoinColumn(name = "ROLE_ID")
private Role role;
TreeNode类:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class TreeNode extends Observable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected long id;
和位置类别:
@Entity
@Table(name = "standort")
@NamedQuery(name = "standort.findAll", query = "SELECT s FROM Standort s order by s.name desc")
public class Standort extends TreeNode implements Comparable<Standort>, Serializable {
如果我现在删除一个位置,即使我有CascadeType.REMOVE
,mappedRole也不会被删除。 。如何让jpa将某个位置的删除操作级联到mappedRole表?
最佳答案
级联仅适用于声明它的实体。即,
public class MappedRole {
@ManyToOne(cascade = { CascadeType.REMOVE }, fetch = FetchType.EAGER)
@JoinColumn(name = "TREENODE_ID", nullable = false)
private TreeNode treeNode;
如果删除 MappedRole
,则应删除所有相应的 TreeNode
。
您在TreeNode
或Standort
中似乎没有反@OneToMany
关系,因此当您删除TreeNode时
或 Standort
与 JPA 可以级联任何内容没有关系。
尝试这样:
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class TreeNode ... {
@OneToMany(cascade= { CascadeType.REMOVE }, mappedBy="treeNode" )
private List<MappedRole> mappedRoles;
并确保将每个 MappedRole
也放入其所属 TreeNode
的 mappedRoles
列表中。
关于java - JPA 删除时级联抽象/继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56145268/
我是一名优秀的程序员,十分优秀!