簡體   English   中英

JPA ManyToOne實體映射

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM