Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA FetchType.EAGER不工作_Java_Jpa_Jersey_Fetch - Fatal编程技术网

Java JPA FetchType.EAGER不工作

Java JPA FetchType.EAGER不工作,java,jpa,jersey,fetch,Java,Jpa,Jersey,Fetch,我正在用javaee(Jersey)和JPA制作一个应用程序,其中我遇到了未初始化实体的问题。我有三个实体:汽车、车主、房子,其中汽车可以有多个车主,车主可以有多个房子。当我返回(entityManager.find)汽车时,车主被初始化。当我返回房屋时,所有者已初始化,但汽车未初始化。我希望能够调用House.getOwner().getCar().getId()之类的东西。现在我必须给房子打电话,然后给车主打电话去弄车。我如何解决这个问题 @Entity @Table(name = "Hou

我正在用javaee(Jersey)和JPA制作一个应用程序,其中我遇到了未初始化实体的问题。我有三个实体:汽车、车主、房子,其中汽车可以有多个车主,车主可以有多个房子。当我返回(entityManager.find)汽车时,车主被初始化。当我返回房屋时,所有者已初始化,但汽车未初始化。我希望能够调用House.getOwner().getCar().getId()之类的东西。现在我必须给房子打电话,然后给车主打电话去弄车。我如何解决这个问题

@Entity
@Table(name = "House")
public class HouseEntity {

  @Id
  @Column(name = "id")
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;

  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "owner_id", nullable = false)
  private OwnerEntity owner;
}

@Entity
@Table(name = "Owner")
public class OwnerEntity {

  @Id
  @Column(name = "id")
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;

  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "car_id")
  private CarEntity car;

  @OneToMany(mappedBy = "owner")
  @JoinColumn(name = "house", nullable = false)
  private Set<HouseEntity> house;

}

@Entity
@Table(name = "Car")
public class CarEntity {

  @Id
  @Column(name = "id")
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;

  @OneToMany(mappedBy = "owner")
  private Set<OwnerEntity> owner;
}
@实体
@表(name=“House”)
公共类房屋实体{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@manytone(fetch=FetchType.EAGER)
@JoinColumn(name=“owner\u id”,nullable=false)
私人所有者;
}
@实体
@表(name=“Owner”)
公共阶级所有权{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@manytone(fetch=FetchType.EAGER)
@JoinColumn(name=“car\u id”)
私家车;
@OneToMany(mappedBy=“所有者”)
@JoinColumn(name=“house”,nullable=false)
私人住宅;
}
@实体
@表(name=“Car”)
公共阶级关怀{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@OneToMany(mappedBy=“所有者”)
私人设置所有者;
}
Edit1:很抱歉,在映射中出现了错误,类运行良好。但初始化问题仍然存在。

尝试以下操作:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "House")
public class HouseEntity {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ManyToOne
    @JoinColumn(name = "owner_id", nullable = false)
    private OwnerEntity owner;

    public long getId() {
        return id;
    }

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

    public OwnerEntity getOwner() {
        return owner;
    }

    public void setOwner(OwnerEntity owner) {
        this.owner = owner;
    }

}





import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "Owner")
public class OwnerEntity {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ManyToOne
    @JoinColumn(name = "car_id")
    private CarEntity car;

    @OneToMany(mappedBy = "owner", fetch = FetchType.EAGER)
    private Set<HouseEntity> houses;

    public long getId() {
        return id;
    }

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

    public CarEntity getCar() {
        return car;
    }

    public void setCar(CarEntity car) {
        this.car = car;
    }

    public Set<HouseEntity> getHouses() {
        return houses;
    }

    public void setHouses(Set<HouseEntity> houses) {
        this.houses = houses;
    }

}



import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "Car")
public class CarEntity {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @OneToMany(mappedBy = "car", fetch = FetchType.EAGER)
    private Set<OwnerEntity> owner;

    public long getId() {
        return id;
    }

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

    public Set<OwnerEntity> getOwner() {
        return owner;
    }

    public void setOwner(Set<OwnerEntity> owner) {
        this.owner = owner;
    }

    public void addOwner(OwnerEntity owner){
        this.owner.add(owner);
    }

}
import javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.JoinColumn;
导入javax.persistence.manytone;
导入javax.persistence.Table;
@实体
@表(name=“House”)
公共类房屋实体{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@许多酮
@JoinColumn(name=“owner\u id”,nullable=false)
私人所有者;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
public OwnerEntity getOwner(){
归还所有人;
}
public void setOwner(OwnerEntity所有者){
this.owner=所有者;
}
}
导入java.util.Set;
导入javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.FetchType;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.JoinColumn;
导入javax.persistence.manytone;
导入javax.persistence.OneToMany;
导入javax.persistence.Table;
@实体
@表(name=“Owner”)
公共阶级所有权{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@许多酮
@JoinColumn(name=“car\u id”)
私家车;
@OneToMany(mappedBy=“owner”,fetch=FetchType.EAGER)
私人住宅;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共事业{
返回车;
}
公共车辆(CarEntity car){
这辆车;
}
公共设施{
归还房屋;
}
公共休息室(休息室){
这个房子=房子;
}
}
导入java.util.Set;
导入javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.FetchType;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.OneToMany;
导入javax.persistence.Table;
@实体
@表(name=“Car”)
公共阶级关怀{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@OneToMany(mappedBy=“car”,fetch=FetchType.EAGER)
私人设置所有者;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共集getOwner(){
归还所有人;
}
公共无效集合所有者(集合所有者){
this.owner=所有者;
}
public void addOwner(OwnerEntity所有者){
this.owner.add(owner);
}
}

当您获取汽车时,将填充整个对象图。

尝试使用Hibernate.initialize()此处出现错误:OwnerEntity将自身映射为Set owner?是的,我在那里犯了个错误。我认为这些实体很大,所以我将它们编辑得更短,但出现了错误。注意,所有者mappedBy也错了,应该是mappedBy=“car”,除了打字错误会阻止hibernate映射实体,我认为映射中没有问题。问题在别处,您是否检查了getter和setter方法名称是否与属性名称匹配?区别是什么?请补充一些解释。