使用@ManyToOne和@OneToMany清空列表

时间:2014-03-17 19:45:22

标签: java java-ee jpa

我尝试使用bidrectional Mapping。首先是守则: 的的MapPoint

@Entity
public class MapPoint implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private int x;
private int y;
private String name;
@ManyToOne
private GameMap map;

private static final long serialVersionUID = 1L;

public MapPoint() {
    super();
}   
public int getId() {
    return this.id;
}

public void setId(int id) {
    this.id = id;
}   
public int getX() {
    return this.x;
}

public void setX(int x) {
    this.x = x;
}   
public int getY() {
    return this.y;
}

public void setY(int y) {
    this.y = y;
}   
public String getName() {
    return this.name;
}

public void setName(String name) {
    this.name = name;
}

public GameMap getMap() {
    return map;
}
public void setMap(GameMap map) {
    this.map = map;
}

GameMap

@Entity
public class GameMap implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@OneToMany(mappedBy="map")
private List<MapPoint> pois;
private static final long serialVersionUID = 1L;
public GameMap()
{
    super();
}

public int getId() {
    return this.id;
}

public void setId(int id) {
    this.id = id;
}

public List<MapPoint> getPois() {
    return pois;
}

public void setPois(List<MapPoint> pois) {
    this.pois = pois;
}

Query q = em.createNamedQuery("GameMap.findall");
return (GameMap) q.getResultList().get(0);

当我尝试使用它时,我的GameMap总是有一个POIS列表。表是在部署期间创建的,并且所有Mappoint都在JPA本身的数据库中设置了MAP_ID,因此应该连接它。我的问题是,我做错了什么?我过去经常使用这个,但是很长一段时间以及任何其他类似的问题都没有帮助我。

非常感谢!

1 个答案:

答案 0 :(得分:0)

默认情况下,

ManyToOne关系是Lazy加载的,如果您想要加载它们,则必须指定它们。尝试:

@OneToMany(mappedBy="map", fetch=FetchType.EAGER)
private List<MapPoint> pois;

或者,如果在持久性上下文中调用getPois(),则应使用数据填充列表。