2016-09-15 156 views
1

我有三個類,Site,GoupIP和IPJPA OneToMany MappedBy關係

一個站點有一個或多個GrouIP。 GroupIP有一個或多個IP。

下面是代碼:

網站

@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; 
} 

} 

在GroupIp類,我m到處:

在屬性「IPS」,值「groupip」「由映射」不能被解析到目標實體的屬性。

我的代碼有什麼問題?

+0

?沒有必要使用它,因爲「Site」類定義了一對多關係,所以它將創建一個表來映射這些行。如果你試圖在你的類之間實現單向關係,那麼你做錯了。見[這裏](http://stackoverflow.com/questions/12038380/how-to-define-unidirectional-onetomany-relationship-in-jpa)。 – px06

+1

由mappedBy =「groupIp」替換mappedBy =「groupip」 –

+0

@ px06他在哪裏聲明他希望site-groupip關係是單向的?還要注意,如果你想要一個雙向關係,你需要映射雙方,但使一個關係的所有者。 – Thomas

回答

4

您必須放入關係中的mappedBy名稱是類屬性的名稱,而不是表名。

所以把@OneToMany(mappedBy = "groupIp",...(注意大寫),而不是你爲什麼要使用`@ ManyToOne`在`GroupIP` @OneToMany(mappedBy = "groupip",...

+0

謝謝你的工作。但在'HttpServletResponse'上,我得到了'網站'的'組'而不是'組'的'Ips'。 –

+0

我想你是從HTML表單發送數據。看看http://stackoverflow.com/questions/24658195/trouble-passing-a-list-object-as-hidden-variable-from-jsp-to-a-servlet – carborgar