2012-09-04 138 views
0

我有兩個實體EquipementCompany這樣的:休眠如何保存多對一

public class Equipement{ 
    String type ; 
    Company company ; 

    @ManyToOne(cascade = CascadeType.ALL) 
    public Company getCompany(){ 
    return this.company ; 
    } 
} 

public class Company{ 
    // fields getters setters .. 
} 

每個EquipementCompany買的,我需要創建Company,然後將其注入到Equipement

Session session = SessionFactory.openSession() ; 
Transaction tx = session.beginTransaction() ; 

Equipement equipement = new Equipement() ; 
Company company = new company() ; 
equipement.setCompany(company) ; 
session.save(equipement) ; 

tx.commit() ; 
session.close() ; 

並給我一個例外

TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.marsamaroc.mmapp.domain.Company 

回答

0

嘗試

public class Company 
{ 
    @OneToMany(cascade = CascadeType.ALL) 
    public Set<Equipement> getEquipements() { ... } 
} 

... 
Session session = SessionFactory.openSession() ; 
Transaction tx = session.beginTransaction() ; 

Equipement equipement = new Equipement() ; 
Company company = new company() ; 
equipement.setCompany(company) ; 

// Save should cascade (i.e. "equipment" should be saved too). 
session.save(company) ; 

tx.commit() ; 
session.close() ; 
... 

順便說一下,在英語中,它的 「裝備」,沒有額外的 'E'(如果你關心!)。

+0

如果我必須保存許多具有相同'公司'的'Equipement'條目,我試過這個,但它只保存了「公司」。 – elaich

+0

你有'Cascade.ALL'設置在'公司'(見更新的答案)? –

+0

另外,我不認爲在協會的「設備」一側有'Cascade.ALL'是你想要的(儘管可能是錯誤的)。 –