当前位置: 首页 > 知识库问答 >
问题:

如何解决组织问题。冬眠由于继承类而导致的MappingException

孟文栋
2023-03-14

最近,我将我的项目从Hibernate版本3.1迁移到4.3,为了更好的性能,我试图使用注释而不是我的xml映射。在继承类的所有实体类中,我都有以下异常。错误是"org.hibernate.映射异常"

我试图将targetEntity添加到manytone类中,并添加了@Access(AccessType.PROPERTY),但没有任何效果。无法更改为字段注释,因为我有150个实体类。我试图删除扩展类及其@override方法,但异常不存在,但是,我需要添加并使用它。

这是我的实体类

    @Entity
    @Table(name = "mapusergroups", catalog = "designdb")
    public class Mapusergroups extends PlanroomMigrationEntity implements 
    java.io.Serializable {

private int idMapUserGroups;
private Groups groups;
private Users users;

public Mapusergroups() {
}

public Mapusergroups(Groups groups, Users users) {
    this.groups = groups;
    this.users = users;
}

@Id
@GeneratedValue(strategy = IDENTITY)

@Column(name = "idMapUserGroups", unique = true, nullable = false)
public int getIdMapUserGroups() {
    return this.idMapUserGroups;
}

public String getIdMapUserGroupsString() {
    return "" + this.idMapUserGroups;
}

public void setIdMapUserGroups(int idMapUserGroups) {
    this.idMapUserGroups = idMapUserGroups;
}

@ManyToOne(fetch = FetchType.LAZY, targetEntity = Groups.class)
@JoinColumn(name = "FK_idGroups", nullable = false)
@PlanroomMigrationEntity.PathUpToCompany
public Groups getGroups() {
    return this.groups;
}

public void setGroups(Groups groups) {
    this.groups = groups;
}

@ManyToOne(fetch = FetchType.LAZY, targetEntity = Users.class)
@JoinColumn(name = "FK_idUsers", nullable = false)
@PlanroomMigrationEntity.ReferenceToUser
public Users getUsers() {
    return this.users;
}

public void setUsers(Users users) {
    this.users = users;
}

@Override
public BaseWrapper<?> getWrapper() {
    return new WMapUserGroups(this);
}

@Override
public PlanroomMigrationDAO getDao() {
    return new MapUserGroupsDAO();
}

@Override
public void attachReferences(JSONObject json, ObjectFinder finder)
        throws JSONException {      this.users = json.has("userId") ? (Users) finder.lookup(Users.class,
json.get("userId").toString()) : null;
this.groups = json.has("groupId") ? (Groups) finder.lookup(
        Groups.class, json.get("groupId").toString()) : null;
}

这是我的xml,用于转换为注释

   @XmlType
   public class Mapusergroups extends PlanroomMigrationEntity implements
    java.io.Serializable {

private int idMapUserGroups;
private Users users;
private Groups groups;

public Mapusergroups() {
}

@Deprecated
public Mapusergroups(Users users, Groups groups) {
    this.users = users;
    this.groups = groups;
}

@XmlAttribute
public int getIdMapUserGroups() {
    return this.idMapUserGroups;
}

@XmlAttribute
@XmlID
public String getIdMapUserGroupsString() {
    return "" + this.idMapUserGroups;
}

public void setIdMapUserGroups(int idMapUserGroups) {
    this.idMapUserGroups = idMapUserGroups;
}

@XmlAttribute
@XmlIDREF
@PlanroomMigrationEntity.ReferenceToUser
public Users getUsers() {
    return this.users;
}

public void setUsers(Users users) {
    this.users = users;
}

@XmlAttribute
@XmlIDREF
@PlanroomMigrationEntity.PathUpToCompany
public Groups getGroups() {
    return this.groups;
}

public void setGroups(Groups groups) {
    this.groups = groups;
}

@Override
public BaseWrapper<?> getWrapper() {
    return new WMapUserGroups(this);
}

@Override
public PlanroomMigrationDAO getDao() {
    return new MapUserGroupsDAO();
}

@Override
public void attachReferences(JSONObject json, ObjectFinder finder)
        throws JSONException {
    this.users = json.has("userId") ? (Users) finder.lookup(Users.class,
            json.get("userId").toString()) : null;
    this.groups = json.has("groupId") ? (Groups) finder.lookup(
            Groups.class, json.get("groupId").toString()) : null;
}

我需要将PlanroomMigrationEntity与属性注释一起使用。请帮忙。

这是我的追踪

组织。冬眠MappingException:无法确定com的类型。在项目服务平面图室。PlanroomMigrationDAO,位于表:mapusergroups,用于org的列:[org.hibernate.mapping.Column(dao)]。冬眠映射。简单价值。org上的getType(SimpleValue.java:349)。冬眠映射。简单价值。isValid(SimpleValue.java:322)位于org。冬眠映射。所有物isValid(Property.java:241)位于org。冬眠映射。PersistentClass。在org上验证(PersistentClass.java:496)。冬眠映射。根类。在org上验证(RootClass.java:270)。冬眠cfg。配置在org上验证(Configuration.java:1360)。冬眠cfg。配置buildSessionFactory(Configuration.java:1851)位于org。冬眠cfg。配置wadetech上的buildSessionFactory(Configuration.java:1930)。DB。基础冬眠动物。(HibernateUtils.java:111)在wadetech。DB。基础巴谢道。(BaseDAO.java:43)在wadetech。DB。道斯__维护道。(_MaintenanceDAO.java:10)在com上。在项目乌提尔斯。运行时。运行时修改器。HasExecuted(RuntimeModifier.java:127)在wadetech上执行。听众。ModificationScriptStartupListener。contextInitialized(ModificationScriptStartupListener.java:47)位于org。阿帕奇。卡塔琳娜。果心标准上下文。listenerStart(StandardContext.java:5016)位于org。阿帕奇。卡塔琳娜。果心标准上下文。startInternal(StandardContext.java:5528)位于org。阿帕奇。卡塔琳娜。util。生命周期酶。在org上启动(LifecycleBase.java:150)。阿帕奇。卡塔琳娜。果心ContainerBase$StartChild。在org上调用(ContainerBase.java:1575)。阿帕奇。卡塔琳娜。果心ContainerBase$StartChild。在java上调用(ContainerBase.java:1565)。util。同时发生的未来任务。在java上运行(FutureTask.java:262)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1145)。util。同时发生的线程池执行器$Worker。在java上运行(ThreadPoolExecutor.java:615)。朗。丝线。运行(Thread.java:745)

共有1个答案

牟稳
2023-03-14

这和继承没有太大关系。读取错误消息。它说Hibernate不知道如何映射实体的类型Planroom MigrationDAO的属性。

这个属性首先不应该存在:实体不应该负责创建DAO。

但如果您真的想坚持这种设计,您需要告诉JPA dao不是持久性属性。这就是@Transient注释的作用。

 类似资料:
  • 问题内容: 我有两个加载同一个类的ClassLoader。因此,显然这些不能互相投射。但是我需要访问在其他ClassLoader中创建的对象。 我可以访问两个ClassLoader。如何在其他课程中使用该对象?我不需要强制转换对象以匹配当前的ClassLoader。 但是问题在于返回的对象的类型为。因此,我必须放弃该对象才能访问某些方法。我怎样才能做到这一点?像下面这样的普通类型转换会导致Clas

  • 本文向大家介绍解决tensorflow由于未初始化变量而导致的错误问题,包括了解决tensorflow由于未初始化变量而导致的错误问题的使用技巧和注意事项,需要的朋友参考一下 我写的这个程序 出现了如下所示的错误: 原因是倒数第二行的sub没有初始化,倒数第三行应该是初始化sub的,但是打错了,成了sun,这样后面出现的sub就相当于没有初始化,所以出现了变量没有初始化的错误。 以上这篇解决ten

  • 我是Scala初学者。我被告知“特征中的一个领域可以是具体的也可以是抽象的”。 当我运行上述代码时,编译器输出了一些错误消息: “C2类继承了冲突成员:String类型的特征T2中的值f1和String类型的特征T3中的变量f1(注意:这可以通过在C2类中声明重写来解决。)类C2用T3{}扩展T2 那么,如果C2扩展了具有相同字段名的特征,那么应该改变什么呢?谢谢你的帮助。

  • 问题: 我是否需要删除接口IAbstractUserService上的泛型? 是否与此答案的类型擦除有关?https://stackoverflow.com/a/31266152/6698175 问题: 我得到了这个例外: <代码>组织。冬眠ErrorClassException:对象[id=1]不属于指定的子类[com.faz.idb.models.advisor]:加载的对象属于错误的com类

  • 我正在尝试构建海豚播放器,但我得到了他的错误:

  • 我正在尝试从当前用户那里获取特定租金的列表。 控制器中的代码: account\u id是外键。 运行后,我发现错误: 我做错了什么?