簡體   English   中英

春季:如何從一個對象提取數據並將其插入另一個對象

[英]Spring: How to Extract Data from One Object and Insert Into Another

我目前有兩個表: WorkforceEmployees 勞動力表是已提交履歷以加入公司的所有潛在雇員的集合。 員工表是勞動力表中實際被雇用的人員的集合。

環境 :1. Eclipse 2. Java(J2EE)3. Maven 4. Spring 5. JPA(JpaRepository)

為簡便起見,我將堅持使用與提取數據並將數據插入另一個表相關的文件。

由於兩個表的相似性, Workforce表中的許多字段將與Employees表中的字段相似:

  1. 名字
  2. 電話號碼等...

如果員工的個人選擇,有一個名為“isHired”一個布爾值,將有每周的1值,人在勞動力中的表的“1”為“isHired”將從提取的值勞動力表並插入到雇員表中。

常規的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();

}

勞動力

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的BREVITY它們幾乎是相同的,除了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對象中提取數據並將其插入到另一個對象中嗎?

如果Employees和Workforce完全相同,則可以使用休眠繼承。 添加復制構造函數並重新保存實體。但是,如果您具有不同的約束或id生成器(可能是Employees已經具有Workforce id的情況),這可能無濟於事。 簡單的例子就是從Workforce創建雇員並通過保存創建的對象

employee = new Employees(w.firstName, w.lastName, w.dept, w.phone);
Employees.saveAndFlush(employee);

在這種情況下,您將創建新的Employees,並且存儲庫會將其正確保存。 也許在保存newEmployees(Workforce的副本)之后,您應該刪除舊的Workforce

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM