2016-08-10 5 views
0

Ich habe zwei Tabelle, Lieferant und Firma.Viele zu eins Mapping mit Set

Die Firmen werden bereits eingerichtet. Bei der Erstellung des Lieferanten erhalte ich eine Liste der Unternehmen, an die der Lieferant die Waren liefert.

Liste wird von companies_id enthalten sein, was der Primärschlüssel des Unternehmens ist. Beim Einfügen von Lieferantendetails in die Lieferantentabelle möchte ich den Lieferanten den Unternehmen zuordnen, die er in der Unternehmenstabelle bereitstellt.

Ich tue diese Zuordnung in meinem SupplierEO

@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER, targetEntity = CompanyEO.class) 
    @JoinColumn(name="Company_ID") 
    public Set<CompanyEO> getCompanyEO() { 
     return companyEO; 
    } 

public void setCompanyEO(Set<CompanyEO> companyEO) { 
    this.companyEO = companyEO; 
} 

Am bekommen folgenden Fehler beim Speichern Lieferant Details

org.hibernate.PropertyAccessException: Illegal aufgetreten Getter von CompanyEO.carrierId Aufruf

Antwort

0

Warum verwenden Sie nicht @ManyToMany oder @OneToMany? Denn wenn Sie mehrere CompanyEO in Ihrem SupplierEO haben, müssen Sie eine toMany Beziehung haben. Auch wenn Sie mehrere CompanyEOs haben, nennen Sie sie bitte auch so. Eine Gruppe von Unternehmen anzurufen ist irreführend, besonders für jemanden, der Ihren Code nicht kennt.

In Bezug auf Ihre Ausnahme: Bitte werfen Sie einen Blick auf diese post. Im Grunde, was JB Nizet sagt, ist:

Meine Vermutung ist, dass Hibernate Ihre Setter mit einer eigenen Implementierung von Set (PersistentSet) nennt, die faul-Laden implementiert und ist noch nicht initialisiert, wenn der Setter aufgerufen wird. Da Sie eine Methode für diese Gruppe aufrufen, lädt sie die Gruppe selbst, während sie sich bereits in einer Ladephase befindet, wodurch Hibernate in einen inkonsistenten Zustand versetzt wird.

So ist es besser, Feldzugriff statt Eigenschaft Zugriff zu verwenden.

Edit: Oh und bitte fügen Sie auch Ihre ganze Stack-Trace, sondern als Code und nicht als Blockquote.