[JAVA] [JPA] Comparez table1 et table2 pour obtenir et mettre à jour des données qui n'existent pas dans la table2.

Cette fois, nous avons préparé des tables appelées Employé1 et Employé2 dans le DB. Comparez les deux pour obtenir / mettre à jour des données d'identification qui n'existent pas dans Employee2

Préparation DB

Employee1

id first_name last_name height weight skill_level
1 TARO TANAKA 170 50 2
2 JIRO YAMADA 150 60 3
3 HANAKO YAMASHITA 156 44 3
4 ICHIRO SUZUKI 180 80 5
5 SABURO TANAKA 174 65 1
7 AI SUZUKI 160 50 4
8 GORO AIDA 177 60 3

Employee2

id first_name last_name height weight skill_level
6 Tomohisa Yamashita 178 67 6
7 Sadawo Abe 160 56 5
8 Kaoru Sugita 166 60 2
9 Tomoya Nagase 185 70 6
10 Satoshi Arbre de mari femme 180 70 6
11 Humilité Watanabe 180 75 6
12 Yosuke Kubotsuka 183 60 6
13 Ai Kato 166 50 4

Classe d'entité

● @Entity déclare qu'il s'agit d'une classe d'entité ● @Table Spécifiez le nom de table du DB à mapper ● Ajouté à la colonne @id PK ● @Column Spécifiez le nom de colonne de la table à mapper

Employee1


@Entity
@Table(name = "employee1")
@Getter
public class Employee1 {

	@Id
	@Column(name = "id")
	private Integer id;
	
	@Column(name = "first_name")
	private String firstName;
	
	@Column(name = "last_name")
	private String lastName;
	
	@Column(name = "height")
	private Integer height;
	
	@Column (name = "weight")
	private Integer weight;
	
	@Column (name = "skill_level")
	private Integer skillLevel;
	
	//Méthode de conversion en Employee2
	public Employee2 toConvert() {
		return new Employee2(
				this.getId(),
				this.getFirstName(),
				this.getLastName(),
				this.getHeight(),
				this.getWeight(),
				this.getSkillLevel()
				) ;
	}
}

● @NoArgsConstructor Génère automatiquement un constructeur sans argument (constructeur par défaut) ● @AllArgsConstructor Génère automatiquement des constructeurs avec des arguments (tous les membres)

Employee2


@Entity
@Table(name = "employee1")
@Getter
@NoArgsConstructor
@AllArgsConstructor //La méthode Employee1 crée une instance de Employee2, donc un constructeur avec des arguments est requis
public class Employee1 {
	
	@Id
	@Column(name = "id")
	private Integer id;
	
	@Column(name = "first_name")
	private String firstName;
	
	@Column(name = "last_name")
	private String lastName;
	
	@Column(name = "height")
	private Integer height;
	
	@Column (name = "weight")
	private Integer weight;
	
	@Column (name = "skill_level")
	private Integer skillLevel;
}

Classe de référentiel

● La classe Repository est une interface ● Hériter de JpaRepository et transmettre la classe Entity comme premier argument et le type PK comme deuxième argument ● Annotation donnée à la classe qui communique avec @Repository DB ● @Query Vous pouvez définir une requête avec n'importe quel nom de méthode

Employee1Repository


@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
	
	@Query(nativeQuery=true, value = " SELECT e.* FROM employee  e LEFT OUTER JOIN employee1"
	+ "  e1 ON e.id = e1.id WHERE e1.id IS NULL " )
	public List<Employee> notExist();

Employee2Repository


@Repository
public interface Employee1Repository extends JpaRepository<Employee1, Integer> {

}

Classe d'exécution

● @Autowired Affecté à des variables d'instance

Main


@SpringBootApplication
public class EmployeeApplication implements CommandLineRunner{
	
	@Autowired
	EmployeeRepository employeeRepository;
	
	@Autowired
	Employee1Repository employee1Repository;
	
	
	public static void main(String[] args) {
		SpringApplication.run(EmployeeApplication.class, args);
	}

	@Override
	public void run(String... args) throws Exception {
		
		List<Employee> list = employeeRepository.notExist();
		System.out.println(list.size());
		List<Employee1> list1 = list.stream().map(Employee::toConvert).collect(toList());
		employee1Repository.saveAll(list1);
	}
}

Recommended Posts

[JPA] Comparez table1 et table2 pour obtenir et mettre à jour des données qui n'existent pas dans la table2.
Comment obtenir et ajouter des données depuis Firebase Firestore dans Ruby
Que faire lorsque la "relation" hibernate_sequence "n'existe pas" dans la colonne ID de PostgreSQL + JPA
Traitement lorsqu'un ID qui n'existe pas dans la base de données est entré dans l'URL
MockMVC renvoie 200 même si je fais une demande vers un chemin qui n'existe pas
Comment effacer toutes les données d'une table particulière
J'ai essayé de démarrer avec Spring Data JPA
Que faire si vous sélectionnez un JRE dans Eclipse et obtenez "Le JRE sélectionné ne prend pas en charge le niveau de conformité actuel 11"
Résolution du problème d'affichage de toutes les données du tableau
Exécutez SQL brut dans Hanami pour obtenir des résultats qui ne sont pas dans la colonne
Créez une API pour envoyer et recevoir des données Json avec Spring
Comment obtenir le journal lorsque install4j ne démarre pas