简体   繁体   English

JPA ManyToOne实体映射

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM