IllegalArgumentException:期待IdClass映射 [英] IllegalArgumentException: expecting IdClass mapping

查看:1298
本文介绍了IllegalArgumentException:期待IdClass映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在部署我的应用程序期间,我发生该异常。我在我的应用程序中有很多类,我不知道必须在哪里放置 @IdClass ,这个异常意味着什么。
我正在使用Hibernate 4.1和JBoss AS 7.1 b / b
$ b

  12:10:23,761 INFO [org.hibernate.engine。 jdbc.internal.LobCreatorBuilder](MSC服务线程1-5)HHH000424:禁用上下文LOB创建为createClob()方法抛出错误:java.lang.reflect.InvocationTargetException 
12:10:24,075错误[org.hibernate。 tool.hbm2ddl.SchemaExport](MSC服务线程1-5)HHH000389:不成功:降序列hibernate_sequence
12:10:24076 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport](MSC服务线程1-5)错误:序列hibernate_sequence不存在
12:10:24,281错误[org.jboss.msc.service.fail](MSC服务线程1-5)MSC00001:无法启动服务jboss.persistenceunit。kladr .ear / kladr-ejb-1.0-SNAPSHOT.jar#primary:org.jboss.msc.service.StartException in service jboss.persistenceunit。kladr.ear / kladr-ejb-1.0-SNAPSHOT.jar#primary:Failed在org.jboss.msc.service.ServiceControllerImpl $ StartTask.run(ServiceControll)启动服务
erlmpl.java:1767)[jboss-msc-1.0.2.GA.jar:1.0.2.GA]
在java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)[rt .jar:1.6.0_35]
at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)[rt.jar:1.6.0_35]
at java.lang.Thread。运行(Thread.java:662)[rt.jar:1.6.0_35]
导致:java.lang.IllegalArgumentException:期待IdClass映射
在org.hibernate.ejb.metamodel.AttributeFactory $ 3.resolveMember (AttributeFactory.java:878)
在org.hibernate.ejb.metamodel.AttributeFactory $ 4.resolveMember(AttributeFactory.java:915)
在org.hibernate.ejb.metamodel.AttributeFactory.determineAttributeMetadata(AttributeFactory。的java:在org.hibernate.ejb.metamodel.AttributeFactory.buildAttribute(AttributeFactory.java:91 423)

。在org.hibernate.ejb.metamodel.MetadataContext.wrapUp(MetadataContext.java:214)
at org.hibernate.ejb.metamodel.MetamodelImpl.buildMetamodel(MetamodelIm pl.java:64)
。在org.hibernate.ejb.EntityManagerFactoryImpl<初始化>(EntityManagerFactoryImpl.java:91)
。在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904 )维持在org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
。在组织
。 jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
在org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
。在组织。 jboss.msc.service.ServiceControllerImpl $ StartTask.startService(ServiceControllerImpl.java:1811)[jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service。 ServiceControllerImpl $ StartTask.run(ServiceControllerImpl.java:1746)[jboss-msc-1.0.2.GA.jar:1.0.2.GA]
... 3 more


解决方案

@IdClass 注释用于定义包含id的Class。即这在定义复合密钥的情况下通常使用。即多于一个属性的关键组合。
如果是这样,那么这就是我们的做法。看看下面的例子..我们将类定义为 IdClass ,并使用 @Id 来定义varrious Id 为此 IdClass`。



示例:

  @Entity 
@IdClass( AssignedRoleId.class)
public class AssignedRole
{
@Id
@ManyToOne
private User userId;

@Id
@ManyToOne
私人角色roleId;

私人日期dateAssigned;
}

希望这会有所帮助。

During deploying my app I occurs on that exception. I have a lot of class in my app and I dont know where I must to place @IdClass and what does this exception mean anyway. I am using Hibernate 4.1 and JBoss AS 7.1

12:10:23,761 INFO  [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (MSC service thread 1-5) HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
12:10:24,075 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-5) HHH000389: Unsuccessful: drop sequence hibernate_sequence
12:10:24,076 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-5) ERROR: sequence "hibernate_sequence" does not exist
12:10:24,281 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC00001: Failed to start service jboss.persistenceunit."kladr.ear/kladr-ejb-1.0-SNAPSHOT.jar#primary": org.jboss.msc.service.StartException in service jboss.persistenceunit."kladr.ear/kladr-ejb-1.0-SNAPSHOT.jar#primary": Failed to start service
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_35]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_35]
    at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_35]
Caused by: java.lang.IllegalArgumentException: expecting IdClass mapping
    at org.hibernate.ejb.metamodel.AttributeFactory$3.resolveMember(AttributeFactory.java:878)
    at org.hibernate.ejb.metamodel.AttributeFactory$4.resolveMember(AttributeFactory.java:915)
    at org.hibernate.ejb.metamodel.AttributeFactory.determineAttributeMetadata(AttributeFactory.java:423)
    at org.hibernate.ejb.metamodel.AttributeFactory.buildAttribute(AttributeFactory.java:91)
    at org.hibernate.ejb.metamodel.MetadataContext.wrapUp(MetadataContext.java:214)
    at org.hibernate.ejb.metamodel.MetamodelImpl.buildMetamodel(MetamodelImpl.java:64)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:91)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    ... 3 more

解决方案

@IdClass annotation is used to define the Class that contains the id. i.e. This is generally used in case defining a compound key. i.e. a key composite of more than one attribute. If that is the case, than this is how we do. take a look at following example.. we define a class as IdClass and use @Id's to define varrious Ids for thisIdClass`.

Example :

@Entity
@IdClass(AssignedRoleId.class)
public class AssignedRole
{
  @Id
  @ManyToOne
  private User userId;

  @Id
  @ManyToOne  
  private Role roleId;

  private Date dateAssigned;
}

Hope this helps.

这篇关于IllegalArgumentException:期待IdClass映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆