gpt4 book ai didi

java - Spring:如何从一个对象中提取数据并将其插入到另一个对象中

转载 作者:行者123 更新时间:2023-12-02 13:00:39 26 4
gpt4 key购买 nike

我目前有两个表:劳动力员工劳动力表是已提交简历加入公司的所有潜在员工的集合。 Employees 表是 Workforce 表中实际已雇用的人员的集合。

环境:1. eclipse 2.Java(J2EE)3. Maven4. Spring 5.JPA(JpaRepository)

为了简洁起见,我将只讨论与提取数据和将数据插入另一个表相关的文件。

由于两个表的相似性,Workforce 表中的许多字段将与 Employees 表中的字段类似:

  1. 名字
  2. 姓氏
  3. 部门
  4. 电话号码等等...

如果选择了劳动力中的人员,则会有一个名为“isHired”的 boolean 值,其值为 1。每周,该人员都会出现在 劳动力 表中,其值为“1” ” 的“isHired”将从 Workforce 表中提取并插入到Employees 表中。

一般的 SQL 查询看起来像这样(并且在没有 Spring HPQL 约束的常规 IDE 中工作):

INSERT INTO Employees (firstName, lastName, dept, phone) 
SELECT emp_firstName, emp_lastName, emp_dept, emp_phone
FROM Workforce WHERE isHired = 1

这工作顺利,但我们正在谈论 JPA,所以这就是我所做的:

在存储库中,该过程分为两项:1)从一个表(Workforce)中提取数据,然后 2)将提取的数据插入另一个表(Employees)

WorkforceRepository.java

package com.example.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import com.example.entities.Workforce;

@Repository
public interface WorkforceRepository extends JpaRepository<Workforce, Long> {
@Query("SELECT new Workforce("
+ "w.workforceid, "
+ "w.firstName, "
+ "w.lastName, "
+ "w.dept, "
+ "w.phone) "
+ "FROM Workforce w WHERE isHired = 1")
public List<Workforce> getNewHires();

}

Workforce.java

package com.example.entities;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Generatedvalue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table

@Entity
@Table(name = "WORKFORCE")
public class Workforce implements Serializable {
private static final long serialVersionUID = 1L;

public Workforce() {
}
public Workforce(long workforceid, String firstName, lastName, dept, phone) {
this.workforceid = workforceid;
this.firstName = firstName;
this.lastName = lastName;
this.dept = dept;
this.phone = phone;
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="workforceid")
private long workforceid;

@Column(name="firstName)
private String firstName;
// OTHER DECLARATIONS REMOVED FOR BREVITY
// GETTERS AND SETTERS REMOVED FOR BREVITY
}

注意:为了简洁起见,我省略了 Employee.java 和EmployeesRepository.java 它们几乎相同,除了 employeeid 之外,这是主键对于 Employee 表,其他列完全相同。构造函数类仅包含同样的四列。

我有大量有效的 CRUD 操作,而这些操作仅发生在同一个表中。但是,我想这样做:

EmployeesController.java

// IMPORTS REMOVED FOR BREVITY
List<Workforce> retrievedRisks = Workforce.getNewHires();
for (Workforce w: retrievedRisks)
Employees.saveAndFlush(w);
// MISC CODE REMOVED FOR BREVITY

我收到的错误当然如下:

Type mismatch: cannot convert from element type Workforce to Employees

有人知道如何使用 JpaRepository 从一个 POJO 对象中提取数据并将其插入到另一个 POJO 对象中吗?

最佳答案

如果Employees和Workforce几乎相同,你可以使用hibernate继承。添加复制构造函数并重新保存实体。但如果您有不同的约束或 id 生成器,它可能不会有帮助(可能是员工已存在且具有 Workforce ids 的情况)。简单的情况就是从 Workforce 创建员工并通过

保存创建的对象
employee = new Employees(w.firstName, w.lastName, w.dept, w.phone);
Employees.saveAndFlush(employee);

在这种情况下,您创建新的员工并且存储库将其正确保存。也许在保存 newEmployees ( Workforce 的副本)之后,您应该删除旧的 Workforce

关于java - Spring:如何从一个对象中提取数据并将其插入到另一个对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44313220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com