在部署我的应用程序期间,发生了该异常。我的应用程序中有很多课程,我不知道必须放置在哪里@IdClass以及该异常意味着什么。我正在使用Hibernate 4.1和JBoss AS 7.1
@IdClass
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批注用于定义包含id的Class。即通常用于定义复合键的情况。即包含多个属性的键组合。如果是这样,那么我们将这样做。请看下面的示例。我们定义一个类,IdClass并使用@Id来定义各种Id s for thisIdClass`。
IdClass
@Id
s for this
范例:
@Entity @IdClass(AssignedRoleId.class) public class AssignedRole { @Id @ManyToOne private User userId; @Id @ManyToOne private Role roleId; private Date dateAssigned; }
希望这可以帮助。