如何解决Java Hibernate,更改从子类实体中的@MappedSuperclass继承的ManyToMany关系表名称
这是我的抽象父亲:
@MappedSuperclass
public class AbstractEntity{
@ManyToMany
protected Set<UserGroupAccess> userGroupAccesses = new HashSet<>();
@ManyToMany
protected Set<UserAccess> userAccesses = new HashSet<>();
}
这是两个继承上述 AbstractEntity 的实体:
@Entity
public class Project extends AbstractEntity{
// some other properties
}
@Entity
public class TodoTask extends AbstractEntity{
// some other properties
}
我想在每个子类实体中覆盖它们,并以 userGroupAccesses 和 userAccesses 表示其关系表,例如,对于 Project >实体我需要它具有自己的表 projectuserGroupAccesses 和表 projectuserAccesses ,该表表示在 AbstractEntity 超类中定义的关系。
以前,我能够使用实体的XML表示来解决此类问题,我只是在每个实体XML中定义以下内容:
<set name="userGroupAccesses" table="projectusergroupaccesses" cascade="all-delete-orphan">
<cache usage="read-write" />
<key column="projectid" />
<many-to-many class="org.hisp.dhis.user.UserGroupAccess" column="usergroupaccessid" unique="true" />
</set>
<set name="userAccesses" table="projectuseraccesses" cascade="all-delete-orphan">
<cache usage="read-write" />
<key column="projectid" />
<many-to-many class="org.hisp.dhis.user.UserAccess" column="useraccessid" unique="true" />
</set>
但是我仍然不确定如何在Entity的Annotation表示中做到这一点。 我已经阅读了有关 @AssociationOverrides 和 @JoinTable 的信息,我知道它们是解决我的问题所需要的,但是我仍然无法解决它们。 / p>
有人可以以我的情况为例来说明如何正确使用 @AssociationOverrides 和 @JoinTable 吗?
解决方法
最后,我设法知道它是如何完成的。 在我的用例中,我们使用 @AssociationOverrides 和 @JoinTable 来覆盖父级定义的关系的方式如下:
// Parent class
@MappedSuperclass
public class AbstractEntity{
@ManyToMany
protected Set<UserGroupAccess> userGroupAccesses = new HashSet<>();
@ManyToMany
protected Set<UserAccess> userAccesses = new HashSet<>();
}
和子实体,我需要将它们更改为以下内容:
// First Child Entity
@Entity
@AttributeOverride(name = "id",column = @Column(name = "projectid"))
@AssociationOverride(
name="userGroupAccesses",joinTable=@JoinTable(
name="projectusergroupaccesses",joinColumns=@JoinColumn(name="projectid"),inverseJoinColumns=@JoinColumn(name="usergroupaccessid")
)
)
@AssociationOverride(
name="userAccesses",joinTable=@JoinTable(
name="projectuseraccesses",inverseJoinColumns=@JoinColumn(name="useraccessid")
)
)
public class Project extends AbstractEntity {
// some other properties
}
/////////////////////////
// Second Child Entity
@Entity
@AttributeOverride(name = "id",joinTable=@JoinTable(
name="todotaskusergroupaccesses",joinColumns=@JoinColumn(name="todotaskid"),joinTable=@JoinTable(
name="todotaskuseraccesses",inverseJoinColumns=@JoinColumn(name="useraccessid")
)
)
public class TodoTask extends AbstractEntity {
// some other properties
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。