父对象持久化后,Hibernate中的引用实体为null

时间:2018-04-10 22:59:21

标签: java hibernate

我有2个实体类,如下所示。父对象持久化后, 访问外键引用对象返回null。实体类如下所示。

我有一个像下面这样的员工实体类

@Entity
@Table(name = "employees")
public class Employee {
    private long employeeId;
    private String name;
    private long companyId;
    private Company companyByCompanyId;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "employee_id")
    public long getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(long employeeId) {
        this.employeeId = employeeId;
    }

    @Basic
    @Column(name = "name")
    public String getName() {
        return name;
    }

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

 @Basic
@Column(name = "company_id")
public long getCompanyId() {
    return companyId;
}

public void setCompanyId(long companyId) {
    this.companyId = companyId;
}

    @ManyToOne
    @JoinColumn(name = "company_id", referencedColumnName = "company_id", nullable = false, insertable = false, updatable = false)
    public Company getCompanyByCompanyId() {
        return companyByCompanyId;
    }

    public void setCompanyByCompanyId(Company companyByCompanyId) {
        this.companyByCompanyId = companyByCompanyId;
    }
}

和公司实体类如下

@Entity
@Table(name = "companies")
public class Company {
    private long companyId;
    private String companyName;
    private Collection<Employee> employeesByCompanyId;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "company_id")
    public long getCompanyId() {
        return companyId;
    }

    public void setCompanyId(long companyId) {
        this.companyId;
    }

    @Basic
    @Column(name = "company_name")
    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    @OneToMany(mappedBy = "companyByCompanyId")
    public Collection<Employee> getEmployeesByCompanyId() {
        return employeesByCompanyId;
    }

    public void setEmployeesByCompanyId(Collection<Employee> employeesByCompanyId) {
        this.employeesByCompanyId = employeesByCompanyId;
    }
}

这是控制器类中的控制器方法

    @ApiOperation(value="Create a new employee")
            @ApiResponses({})
            @RequestMapping(value= "/createEmployee",method= RequestMethod.POST)
            public Callable<EmployeeDTO> createEmployee(
                    HttpServletRequest request,

                    @RequestBody @Valid final List<EmployeeDTO> employeeDto) {
               long employeeId = employeeService.createEmployee(employeeDto);
              EmployeeDTO createdEmployee = employeeService.getEmployee(employeeId);
return () -> createdEmployee;
    }

这是服务类

中createEmployee(employeeDto)的方法
@Transactional
public long createEmployee(employeeDto){
        Employee employee = new Employee();
        employee.setName(employeeDto.getName());
        employee.setCompanyId(employeeDto.getCompanyId());
        Employee savedEmployee = employeeRepository.save(employee);
        return savedEmployee.getEmployeeId();
}

这是与上面相同的服务类中的getEmployee方法。

public EmployeeDTO getEmployee(long employeeId) {

        Employee employee = employeeRepository.findByEmployeeId(employeeId);

       EmployeeDTO employeeDTO = new EmployeeDTO();
       employeeDTO.setEmployeeId(employee.getEmployeeId());
       employeeDTO.setName(employee.getName());
   employeeDTO.setCompanyByCompanyId(employee.getCompanyByCompanyId());
    }

employee.getCompanyByCompanyId() - &gt;这是它抛出Null指针异常的地方。

公司表已经有我与员工关联的公司行。

0 个答案:

没有答案