framework-web:spring:models

Models

On utilise dans le cadre de cet exemple une base de données embarquée H2Db.

Créer un projet en ajoutant les dépendances suivantes :

Modifier le fichier de configuration de l'application Spring pour l'intégration de H2 :

La base de données dbExemple est stockée dans le dossier data.

spring.datasource.url=jdbc:h2:file:./data/dbExemple;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

...

Soit le diagramme de classes suivant, correspondant à une application de gestion de messagerie :

Création d'une Entité

package s4.spring.td2.models;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Organization {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	
	private String name;
	private String domain;
	private String aliases;
}

Annotations :

Création d'un Repository

public interface OrgaRepository extends JpaRepository<Organization, Integer> {
    List<Organization> findByDomain(String domain);
    List<Organization> findByName(String name);
}

JPA Repositories

Test d'ajout d'une instance

Les données sont postées depuis un formulaire contenant les champs name, domain et aliases :

@Controller
@RequestMapping("/orgas/")
public class OrgasController {
	
	@Autowired
	private OrgaRepository repo;
	
	@PostMapping("new")
	@ResponseBody
	public String newOrga(Organization orga) {
		repo.saveAndFlush(orga);
		return orga+" ajoutée.";
	}
}

ManyToOne

Chaque groupe appartient à une organisation.

@Entity
public class Groupe {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	
	@ManyToOne
	private Organization organization;
}

OneToMany

Chaque organisation possède plusieurs groupes. (la relation est bi-directionnelle dans ce cas)

@Entity
public class Organization {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	
	private String name;
	private String domain;
	private String aliases;
	
	@OneToMany(cascade=CascadeType.ALL,mappedBy="organization")
	private List<Groupe> groupes;
}

ManyToMany

Chaque utilisateur peut appartenir à plusieurs groupes. Dans chaque groupe, on a plusieurs utilisateurs.

@Entity
public class User {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	
	@ManyToOne
	private Organization organization;
	
	@ManyToMany(mappedBy="users")
	private List<Groupe> groupes;
}

@Entity
public class Groupe{
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	
	@ManyToOne
	private Organization organization;
	
	@ManyToMany
	@JoinTable(name = "user_group")
	private List<User> users;
}

  • framework-web/spring/models.txt
  • Dernière modification : il y a 5 ans
  • de 127.0.0.1