2016-09-15 114 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