@Entity
@Table(name = "T_EMPLOYEE")
@Inheritance(strategy = InheritanceType.JOINED)
public class Employee implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "employee_id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "creator")
private String creator;
@OneToMany(mappedBy = "car", cascade=CascadeType.PERSIST, fetch=FetchType.EAGER)
private List<Car> cars;
public List<Car> getCars() {
return columnboards;
}
public void setCars(List<Car> cars) {
this.cars = cars;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getCreator() {
return creator;
}
}
@Entity
@Table(name = "T_CAR")
public class Car implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "car_id")
private Long id;
@Column(name = "car_name")
private String carName;
@ManyToOne
private Employee car;
@OneToMany(mappedBy="car", cascade=CascadeType.PERSIST, fetch=FetchType.EAGER)
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Collection<Driver> drivers;
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
public Collection<Driver> getDrivers() {
return drivers;
}
public void setCards(Collection<Driver> drivers) {
this.drivers = drivers;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
@Entity
@Table(name = "T_DRIVER")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Driver implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "driver_id")
private Long id;
@Column(name = "point")
private String point;
@Column(name = "colour")
private String colour;
@ManyToOne
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Car car;
public String getPoint() {
return point;
}
public void setPoint(String point) {
this.point = point;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
我有上面的三个实体,表格是使用Liquibase
创建的<createTable tableName="T_EMPLOYEE">
<column name="employee_id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false" />
</column>
<column name="name" type="varchar(255)" />
<column name="creator" type="varchar(255)" />
</createTable>
<createTable tableName="T_COLUMN_BOARD">
<column name="CAR_ID" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false" />
</column>
<column name="car_name" type="varchar(255)" />
<column name="employee_employee_id" type="bigint" />
</createTable>
<createTable tableName="T_DRIVER">
<column name="driver_id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false" />
</column>
<column name="point" type="varchar(255)" />
<column name="colour" type="varchar(255)" />
<column name="CAR_ID_FK" type="bigint" />
</createTable>
<addForeignKeyConstraint
baseColumnNames="employee_employee_id"
baseTableName="T_CAR"
constraintName="fk_car_employee_id"
referencedColumnNames="employee_id"
referencedTableName="T_EMPLOYEE" />
<addForeignKeyConstraint
baseColumnNames="CAR_ID_FK"
baseTableName="T_DRIVER"
constraintName="fk_driver_car_id"
referencedColumnNames="CAR_ID"
referencedTableName="T_CAR" />
我遇到的问题是每当我尝试使用汽车列表和驱动程序列表保存实体时。我在数据库中看到以下内容:
T_EMPLOYEE
EMPLOYEE_ID NAME CREATOR
1 John john@example.com
T_CAR
CAR_ID CAR_NAME employee_employee_id
1 ford null
2 Honda null
3 Audi null
4 Opel null
我原本希望在T_CAR.employee_employee_id列中看到Employee_ID。所以这样的事情。
T_CAR
CAR_ID CAR_NAME employee_employee_id
1 ford 1
2 Honda 1
3 Audi 1
4 Opel 1
我整天都在讨厌这个问题,或者我完全错过了什么。
其余服务,将json对象发送到服务。
@RestController
@RequestMapping("/api")
public class EmployeeResource {
private final Logger log = LoggerFactory.getLogger(EmployeeResource.class);
@Inject
private EmployeeRepository employeeRepository;
@RequestMapping(value = "/Employees",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Void> create(@RequestBody Employee employee) throws URISyntaxException {
log.debug("REST request to save Employee : {}", employee);
if (employee.getId() != null) {
return ResponseEntity.badRequest().header("Failure", "A new employee cannot already have an ID").build();
}
employeeRepository.save(employee);
return ResponseEntity.created(new URI("/api/employees/" + employee.getId())).build();
}
@RequestMapping(value = "/employees",
method = RequestMethod.PUT,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Void> update(@RequestBody Employee employee) throws URISyntaxException {
log.debug("REST request to update Employee : {}", employee);
if (employee.getId() == null) {
return create(employee);
}
employeeRepository.save(employee);
return ResponseEntity.ok().build();
}
@RequestMapping(value = "/employees",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Employee>> getAll(@RequestParam(value = "page" , required = false) Integer offset,
@RequestParam(value = "per_page", required = false) Integer limit)
throws URISyntaxException {
Page<Employee> page = employeeRepository.findAll(PaginationUtil.generatePageRequest(offset, limit));
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/employees", offset, limit);
return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
}
@RequestMapping(value = "/employees/{id}",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public Employee get(@PathVariable Long id) {
log.debug("REST request to get Employee : {}", id);
return employeeRepository.findOne(id);
}
@RequestMapping(value = "/employees/{id}",
method = RequestMethod.DELETE,
produces = MediaType.APPLICATION_JSON_VALUE)
public void delete(@PathVariable Long id) {
log.debug("REST request to delete Employee : {}", id);
employeeRepository.delete(id);
}
}
public interface EmployeeRepository extends JpaRepository<Employee,Long> {
}