[JAVA] Spring Boot + Spring Data JPA À propos des jointures de table multiples

J'ai eu du mal à lire des livres de référence tels que INNER JOIN et LEFT JOIN en utilisant Spring, je vais donc l'écrire sous forme de mémorandum.

Ce que je veux réaliser cette fois

Le nom de la pièce et le nom de l'équipement sont affichés à l'écran.

Table de salle

Nom de colonne Type de données
numéro de chambre room_id INT
Nom de la salle room_name VARCHAR

Tableau des équipements

Nom de colonne Type de données
Numéro d'équipement equipmentId_id INT
Nom de l'équipement equipment_name VARCHAR
numéro de chambre room_id INT

Créez une entité (salle et équipement). l'importation est omise.

Room.java


@Entity
public class Room implements Serializable {

	@Id
	@GeneratedValue
	private Integer roomId;

	private String roomName;

	@OneToMany(mappedBy="room", cascade=CascadeType.ALL)
	private List<Equipment> equipments;

	public Integer getRoomId() {
		return roomId;
	}

	public void setRoomId(Integer roomId) {
		this.roomId = roomId;
	}

	public String getRoomName() {
		return roomName;
	}

	public void setRoomName(String roomName) {
		this.roomName = roomName;
	}

	public List<Equipment> getEquipments() {
		return equipments;
	}

	public void setEquipments(List<Equipment> equipments) {
		this.equipments = equipments;
	}
}

Puisqu'il existe une relation un-à-plusieurs avec l'équipement, utilisez @OneToMany.

@OneToMany(mappedBy="room", cascade=CascadeType.ALL)
private List<Equipment> equipments;

Equipment.java


@Entity public class Equipment implements Serializable {

	@Id
	@GeneratedValue
	private Integer equipmentId;

	private String equipmentName;


	@ManyToOne
	@JoinColumn(name="room_id")
	private Room room;

	public Integer getEquipmentId() {
		return equipmentId;
	}

	public void setEquipmentId(Integer equipmentId) {
		this.equipmentId = equipmentId;
	}

	public String getEquipmentName() {
		return equipmentName;
	}

	public void setEquipmentName(String equipmentName) {
		this.equipmentName = equipmentName;
	}

	public Room getRoom() {
		return room;
	}

	public void setRoom(Room room) {
		this.room = room;
	}
}

Puisqu'il existe une relation plusieurs-à-un avec Room, utilisez @ManyToOne. Utilisez room_id dans @JoinColumn comme clé externe.

@ManyToOne
@JoinColumn(name="room_id")
private Room room;

Créez une requête à l'aide de @Query dans le référentiel. Vous pouvez définir la valeur dynamiquement avec @Param ("roomId").

EquipmentRepository.java



public interface EquipmentRepository extends JpaRepository<Equipment, Integer> {

	@Query("SELECT DISTINCT e FROM Equipment e INNER JOIN e.room WHERE e.room.roomId = :roomId ORDER BY e.equipmentId")
	List<Equipment> find(@Param("roomId") Integer roomId);
}

Injecter le référentiel d'équipement avec @Autowired. Une annotation pour obtenir la valeur de la variable de chemin dans l'URL avec @PathVariable ("id").

TestController.java


@Controller
public class TestController {


	@Autowired
	EquipmentRepository equipmentRepository;

	@GetMapping("/{id}")
	public String index(@PathVariable("id")Integer id, Model model) {

		List<Equipment> list2 =equipmentRepository.find(id);
		model.addAttribute("lists2", list2);


		return "index";
	}
}

Sortez les éléments HTML à plusieurs reprises pour le nombre de valeurs de tableau spécifié par th: each.

index.html


<!DOCTYPE html>
<html  xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table>
		<tr>
			<th>chambre</th>
			<th>Équipement</th>
		</tr>
		<tr th:each="list2:${lists2}">
			<td th:text="${list2.room.roomName}">
			<td th:text="${list2.equipmentName}">

		</tr>
	</table>
</body>
</html>

Avec ce qui précède, le nom de la pièce et le nom de l'équipement peuvent être émis. À l'avenir, j'aimerais augmenter le nombre de tables et contester un traitement compliqué.

Recommended Posts

Spring Boot + Spring Data JPA À propos des jointures de table multiples
[spring] Utilisons Spring Data JPA
Flux jusqu'à la sortie des données de la table à afficher avec Spring Boot
[Comment installer Spring Data Jpa]
Sortie du journal Spring Data JPA SQL
Voir le comportement des mises à jour d'entités avec Spring Boot + Spring Data JPA
OU rechercher avec la spécification Spring Data Jpa
À propos du printemps ③
Existe en utilisant la spécification dans Spring Data JPA
Méthode d'implémentation pour source multi-données avec Spring boot (Mybatis et Spring Data JPA)
Exemple de code pour le contrôle de la base de données par transaction déclarative avec Spring Boot + Spring Data JPA
À propos de la conception de Spring Boot et de l'environnement de test unitaire
Résumé de ce que j'ai appris sur Spring Boot
Spring Data JPA save select-insert n'est qu'une insertion
Divers tableau de correspondance de Spring Framework et Spring Boot
Référence mutuelle de l'entité de Spring Data JPA et ses notes
Introduction à Spring Boot + In-Memory Data Grid
Trier par Spring Data JPA (avec tri par clé composée)
Création d'un référentiel commun avec Spring Data JPA
Comment définir plusieurs orm.xml dans Spring4, JPA2.1
[Spring Batch] Données de la table de sortie dans un fichier CSV
Défi Spring Boot
À propos de Spring AOP
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
Vérifiez le comportement de getOne, findById et des méthodes de requête avec Spring Boot + Spring Data JPA
Test des entités et référentiels JPA à l'aide de Spring Boot @DataJpaTest
J'ai essayé de démarrer avec Spring Data JPA
[Spring boot] J'ai pensé au code testable par DI
Jusqu'à l'utilisation de Spring Data et JPA Part 2
Essayez la loi de l'inversion des dépendances avec plusieurs projets Spring Boot
Jusqu'à l'utilisation de Spring Data et JPA Part 1
Créer la variable de clause where dans Spring Data JPA
Un mémorandum sur les types de données de table et les commandes (Rails)
Comment utiliser la même classe Mapper dans plusieurs sources de données avec Spring Boot + MyBatis