【发布时间】:2017-07-01 17:39:03
【问题描述】:
我实现了一个带有组和权限的工作台权限系统。
引用表workbench_group_permissions_reference 具有引用,因此我可以轻松地添加和删除组的权限。
添加新的参考条目可以正常工作,但删除不会。我没有收到任何错误,但删除后引用仍然存在于数据库中。我正在使用 postgreSQL。
这是我的参考类:
@XmlRootElement
@Entity
@Table(name = "workbench_group_permissions_reference", uniqueConstraints = {
@UniqueConstraint(columnNames = { "workbenchgroupspermissions_id", "workbench_groups_id" }) })
public class WorkbenchGroupPermissionReferenceEntity extends BasicEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne
@JoinColumn(name = "workbenchgroupspermissions_id")
private WorkbenchPermissionEntity workbenchPermission;
@ManyToOne
@JoinColumn(name = "workbench_groups_id")
private WorkbenchGroupEntity workbenchGroup;
/**
* Empty constructor to make JPA happy.
*/
public WorkbenchGroupPermissionReferenceEntity() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public WorkbenchPermissionEntity getWorkbenchPermission() {
return workbenchPermission;
}
public void setWorkbenchPermission(WorkbenchPermissionEntity workbenchPermission) {
this.workbenchPermission = workbenchPermission;
}
public WorkbenchGroupEntity getWorkbenchGroup() {
return workbenchGroup;
}
public void setWorkbenchGroup(WorkbenchGroupEntity workbenchGroup) {
this.workbenchGroup = workbenchGroup;
}
}
这是我的删除方法:
public void deleteWorkbenchGroupPermission(final WorkbenchGroupPermissionReferenceEntity workbenchGroupPermission) {
long id = workbenchGroupPermission.getId();
super.delete(WorkbenchGroupPermissionReferenceEntity.class, id);
}
还有 super.delete 方法:
protected void delete(final Class<?> type, final Object id) {
Object ref = this.em.getReference(type, id);
this.em.remove(ref);
}
我在这里错过了什么?
【问题讨论】:
-
分享您的
super.delete(..)方法的代码。我们不知道它的作用 -
@Dark 添加了缺少的超级方法
-
你的方法是在事务中调用的吗?事务是否正确提交?为什么要获取一个实体,提取其 ID,从该 ID 中获取引用(从而取回您最初获得的实体),然后删除该实体,而不是从一开始就删除您拥有的实体?
-
@JBNizet 这是由于应用程序的设置。毫无疑问,有一些重构要做:) 是的,它在事务中被调用并且它被正确提交
标签: java postgresql hibernate jpa many-to-one