[英]JPA ManyToOne entity mapping
Having issues deploying a web project with entities using "OneToMany" mapping. 使用“ OneToMany”映射使用实体部署Web项目时遇到问题。 Here is the first entity:
这是第一个实体:
@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;
}
Here is the second Entity which is reliant upon a composite key: 这是第二个依赖于组合键的实体:
@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;
}
Here is the key: 这是关键:
public class ConstraintAnchorAssetImplKey implements Serializable
{
private double CA_ID;
private String asset;
//Also includes overriden hash/equals
}
Upon deployment I receive an obscure NullPointerException: 部署后,我收到了一个晦涩的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
This exception is introduced with the OneToMany/ManyToOne annotations. 此异常通过OneToMany / ManyToOne注释引入。 Previous success was achieved by simply populating/persisting the two entities separately which is of course not ideal.
先前的成功是通过简单地分别填充/保留两个实体而实现的,这当然不是理想的。
Thanks for any advice! 感谢您的任何建议!
Did you try to replace: 您是否尝试更换:
@OneToMany(cascade={CascadeType.ALL}, mappedBy="USER_ID", targetEntity=Asset.class)
private List<Asset> assets;
with: 与:
@OneToMany(cascade={CascadeType.ALL}, mappedBy="USER_ID", targetEntity=Asset.class)
private Set<Asset> assets = new HashSet<Asset>(0);
or: 要么:
@OneToMany(cascade={CascadeType.ALL}, mappedBy="USER_ID", targetEntity=Asset.class)
private List<Asset> assets = new ArrayList<Asset>(0);
Hope this could help you resolve problems! 希望这可以帮助您解决问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.