2016-09-15 5 views
1

У меня есть три класса, сайт, GoupIP и IPJPA OneToMany MappedBy отношение

сайт имеет один или несколько GrouIPs. В группеIP есть один или несколько 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, я получаю:

В атрибуте 'КН на, «отображаемые на» значение «groupip» не может быть разрешен к атрибуту на целевой объект.

Что случилось с моим кодом?

+0

Почему вы используете '@ ManyToOne' в' GroupIP'? Нет необходимости использовать это, потому что класс '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

Имя сопоставленного имени, которое вы должны установить в качестве отношения, - это имя атрибута класса, а не имя таблицы.

Так положил @OneToMany(mappedBy = "groupIp",... (обратите внимание на верхний регистр) вместо @OneToMany(mappedBy = "groupip",...

+0

Thak you его работы. Но на 'HttpServletResponse' я получил' Группы' 'сайта', но не' Ips' '' Groups'. –

+0

Я полагаю, что вы отправляете данные из HTML-формы. Взгляните на http://stackoverflow.com/questions/24658195/trouble-passing-a-list-object-as-hidden-variable-from-jsp-to-a-servlet – carborgar

Смежные вопросы