【发布时间】:2015-07-02 01:07:39
【问题描述】:
在部署具有使用“OneToMany”映射的实体的 Web 项目时遇到问题。这是第一个实体:
@Entity
@Table(name = "OWNER")
public class Owner implements Serializable
{
@Id
@Column(name = "ID", nullable = false)
private double ID;
@Column(name = "NAME", nullable = false, length = 16)
private String name;
@OneToMany(cascade={CascadeType.ALL}, mappedBy="USER_ID", targetEntity=Asset.class)
private List<Asset> assets;
}
这是依赖于复合键的第二个实体:
@Entity
@IdClass(AssetKey.class)
@Table(name = "ASSETS")
public class Asset implements Serializable
{
@Id
@ManyToOne
@JoinColumn(name = "USER_ID")
private double USER_ID;
@Id
@Column(name = "ASSET_ID")
private String asset;
}
这里是关键:
public class ConstraintAnchorAssetImplKey implements Serializable
{
private double CA_ID;
private String asset;
//Also includes overriden hash/equals
}
部署后我收到一个不起眼的 NullPointerException:
12:59:59,841 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 50) MSC000001: Failed to start service jboss.persistenceunit."MyProj.war#MyProjJPA": org.jboss.msc.service.StartException in service jboss.persistenceunit."MyProj.war#MyProjJPA": java.lang.NullPointerException
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:103) [jboss-as-jpa-7.4.3.Final-redhat-2.jar:7.4.3.Final-redhat-2]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_05]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_05]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_05]
at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1]
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1461)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1391)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1786) at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:900)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:76)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:200) [jboss-as-jpa-7.4.3.Final-redhat-2.jar:7.4.3.Final-redhat-2]
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$600(PersistenceUnitServiceImpl.java:57) [jboss-as-jpa-7.4.3.Final-redhat-2.jar:7.4.3.Final-redhat-2]
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:99) [jboss-as-jpa-7.4.3.Final-redhat-2.jar:7.4.3.Final-redhat-2] ... 4 more
OneToMany/ManyToOne 注释引入了此异常。以前的成功是通过简单地分别填充/持久化两个实体来实现的,这当然不理想。
感谢您的建议!
【问题讨论】:
-
你有没有试过调试代码。
-
这是关于 web 项目的部署。我对调试休眠没有兴趣,老实说我不确定我是否有能力。我希望这将是我的注释中的一个简单/可识别的错误。
标签: java hibernate jpa persistence