[英]JPA ManyToOne entity mapping
使用“ 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注釋引入。 先前的成功是通過簡單地分別填充/保留兩個實體而實現的,這當然不是理想的。
感謝您的任何建議!
您是否嘗試更換:
@OneToMany(cascade={CascadeType.ALL}, mappedBy="USER_ID", targetEntity=Asset.class)
private List<Asset> assets;
與:
@OneToMany(cascade={CascadeType.ALL}, mappedBy="USER_ID", targetEntity=Asset.class)
private Set<Asset> assets = new HashSet<Asset>(0);
要么:
@OneToMany(cascade={CascadeType.ALL}, mappedBy="USER_ID", targetEntity=Asset.class)
private List<Asset> assets = new ArrayList<Asset>(0);
希望這可以幫助您解決問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.