2016-09-15 7 views
1

Ich habe drei Klassen, Standort, GoupIP und IPJPA OneToMany mappedBy Beziehungen

A-Site hat eine oder mehrere GrouIPs. Ein GroupIP hat eine oder mehrere IPs.

Hier ist der Code:

Website

@Entity 
@Table(name = "site") 
public class Site implements Serializable { 
private Set<GroupIp> groups; 

@OneToMany(mappedBy = "site", fetch = FetchType.EAGER, cascade =CascadeType.ALL) 
public Set<GroupIp> getGroups() { 
    return groups; 
} 

public void setGroups(Set<GroupIp> groups) { 
    this.groups = groups; 
} 

} 

GroupIP

@Entity 
@Table(name = "groupip") 
public class GroupIp implements Serializable { 
private Set<Ip> ips; 
private Site site; 

@ManyToOne(cascade = CascadeType.MERGE) 
@JoinColumn(name = "site_id") 
public Site getSite() { 
return site; 
} 

@OneToMany(mappedBy = "groupip", fetch = FetchType.EAGER, cascade =CascadeType.ALL) 
public Set<Ip> getIps() { 
    return ips; 
} 

public void setIps(Set<Ip> ips) { 
    this.ips= ips; 
} 

} 

IP

@Entity 
@Table(name = "ip") 
public class Ip implements Serializable { 
private GroupIp groupIp; 

@ManyToOne(targetEntity = GroupIp.class,cascade = CascadeType.MERGE) 
@JoinColumn(name = "groupip_id", nullable=false) 
public GroupIp getGroupIp() { 
return groupIp; 
} 

public void setGroupIp(GroupIp groupIp) { 
     this.groupIp = groupIp; 
} 

} 

Auf GroupIp Klasse, ich bin immer:

In Attribute ‚ips‘, das kann „abgebildet durch“ Wert ‚groupip‘ auf der Zieleinheit auf ein Attribut nicht aufgelöst werden.

Was ist falsch an meinem Code ??

+0

Warum verwenden Sie '@ ManyToOne' in' GroupIP'? Es ist nicht notwendig, das zu verwenden, da die 'Site'-Klasse definiert hat, dass es eine Eins-zu-viele-Beziehung gibt, daher wird eine Tabelle erstellt, um diese Zeilen zuzuordnen. Wenn Sie versuchen, eine unidirektionale Beziehung zwischen Ihren Klassen zu erreichen, dann tun Sie es falsch. Siehe [hier] (http://stackoverflow.com/questions/12038380/how-to-define-unidirectional-onetomany-relationship-in-jpa). – px06

+1

replace mappedBy = "groupip" durch mappedBy = "groupIp" –

+0

@ px06 wo hat er angegeben, dass er möchte, dass die Site-Groupip-Relation unidirektional ist? Beachten Sie auch, dass Sie, wenn Sie eine bidirektionale Beziehung haben möchten, beide Seiten abbilden müssen, aber einen zum Besitzer der Beziehung machen müssen. – Thomas

Antwort

4

Der Name mappedBy, den Sie in die Beziehung einfügen müssen, ist der Name des Klassenattributs, nicht der Tabellenname.

setzen also @OneToMany(mappedBy = "groupIp",... (beachten Sie die Großschreibung) statt @OneToMany(mappedBy = "groupip",...

+0

Thak du seine Arbeit. Aber auf der "HttpServletResponse" habe ich die 'Gruppen' von' site', aber nicht 'Ips' von' Groups'. –

+0

Ich nehme an, dass Sie Daten aus einem HTML-Formular senden. Werfen Sie einen Blick auf http://stackoverflow.com/questions/24658195/trouble-passing-a-list-object-as-hidden-variable-from-jsp-to-a-servlet – carborgar

Verwandte Themen