3 лаба (Многие ко многим) (вроде работает).

This commit is contained in:
Павел Сорокин 2023-03-13 20:52:56 +04:00
parent 0df1eca957
commit f0e3f4374b
6 changed files with 63 additions and 27 deletions

View File

@ -27,13 +27,13 @@ public class Client {
this.lastName = lastName;
this.purchases = new ArrayList<>();
}
public void addPurchase(Purchase purchase)
{
this.purchases.add(purchase);
if(purchase.getClient() != this)
public void setPurchase(Purchase purchase) {
if(purchase==null)
{
purchase.setClient(this);
throw new IllegalArgumentException("Да");
}
this.purchases.add(purchase);
}
public Long getId() {

View File

@ -32,14 +32,7 @@ public class ClientService {
em.persist(client);
return client;
}
@Transactional
public Client addPurchase(Long id, Date DateOfPurchase,double price)
{
final Client curclient = findClient(id);
final Purchase purchase=purchaseService.addPurchase(DateOfPurchase,price);
curclient.addPurchase(purchase);
return em.merge(curclient);
}
@Transactional(readOnly = true)
public Client findClient(Long id) {
final Client client = em.find(Client.class, id);

View File

@ -24,7 +24,7 @@ public class Purchase {
@JoinColumn(name ="client_fk")
private Client client;
@ManyToMany
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "purchases_techniques",
joinColumns = @JoinColumn(name = "purchase_fk"),
inverseJoinColumns = @JoinColumn(name = "technique_fk"))
@ -44,13 +44,13 @@ public class Purchase {
public List<Technique> getTechnique() {
return techniques;
}
public void setTechnique(Technique technique) {
public void addTechnique(Technique technique) {
if (techniques == null){
techniques = new ArrayList<>();
}
this.techniques.add(technique);
if (!technique.getPurchases().contains(this)) { // warning this may cause performance issues if you have a large data set since this operation is O(n)
technique.getPurchases().add(this);
if (technique.getPurchase()==null) { // warning this may cause performance issues if you have a large data set since this operation is O(n)
technique.setPurchase(this);
}
}
public Long getId()
@ -79,6 +79,9 @@ public class Purchase {
}
public void setClient(Client client)
{
if(this.client != null){
this.client.getPurchases().remove(this);
}
this.client=client;
if (!client.getPurchases().contains(this)) {
client.getPurchases().add(this);

View File

@ -10,6 +10,7 @@ import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityNotFoundException;
import jakarta.persistence.PersistenceContext;
import ru.ulstu.is.sbapp.purchase.model.Purchase;
import ru.ulstu.is.sbapp.technique.model.Technique;
import java.util.Date;
import java.util.List;
@ -20,7 +21,7 @@ public class PurchaseService {
private EntityManager em;
@Transactional
public Purchase addPurchase(Date DateOfPurchase, double Price) {
public Purchase addPurchase(Date DateOfPurchase, double Price, List<Technique> techniques) {
if (DateOfPurchase==null) {
throw new IllegalArgumentException("Date of purchase is null or empty");
}
@ -28,6 +29,9 @@ public class PurchaseService {
throw new IllegalArgumentException("Price is null or empty");
}
final Purchase purchase = new Purchase(DateOfPurchase, Price);
for (int i = 0; i < techniques .size(); i++){
purchase.addTechnique(techniques.get(i));
}
em.persist(purchase);
return purchase;
}

View File

@ -3,6 +3,7 @@ package ru.ulstu.is.sbapp.technique.model;
import jakarta.persistence.*;
import ru.ulstu.is.sbapp.purchase.model.Purchase;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@ -19,7 +20,7 @@ public class Technique {
@ManyToMany(mappedBy = "techniques")
@ManyToMany(mappedBy = "techniques",fetch = FetchType.EAGER)
private List<Purchase> purchases;
public Technique(){}
@ -48,10 +49,19 @@ public class Technique {
{
this.TechPrice=TechPrice;
}
public List<Purchase> getPurchases()
public List<Purchase> getPurchase()
{
return purchases;
}
public void setPurchase(Purchase purchase) {
if (purchases == null){
purchases = new ArrayList<>();
}
this.purchases.add(purchase);
if (!purchase.getTechnique().contains(this)) { // warning this may cause performance issues if you have a large data set since this operation is O(n)
purchase.getTechnique().add(this);
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@ -64,4 +74,13 @@ public class Technique {
public int hashCode() {
return Objects.hash(id);
}
@Override
public String toString() {
return "Technique{" +
"id=" + id +
", Type='" + Type + '\'' +
", TechPrice ='" + TechPrice + '\'' +
'}';
}
}

View File

@ -1,5 +1,6 @@
package ru.ulstu.is.sbapp;
import jakarta.persistence.EntityNotFoundException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@ -8,6 +9,7 @@ import ru.ulstu.is.sbapp.client.model.Client;
import ru.ulstu.is.sbapp.client.service.ClientService;
import ru.ulstu.is.sbapp.purchase.model.Purchase;
import ru.ulstu.is.sbapp.purchase.service.PurchaseService;
import ru.ulstu.is.sbapp.technique.model.Technique;
import ru.ulstu.is.sbapp.technique.service.TechniqueService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -36,19 +38,34 @@ public class TechShopTest {
Assertions.assertNotNull(client.getId());
}
@Test
void testPurchaseCreate()
{
purchaseService.deleteAllPurchases();
clientService.deleteAllClients();
final Client client = clientService.addClient("Вася","Пупкин");
Date date = new Date(12121212L);
clientService.addPurchase(client.getId(),date, 3000.0);
log.info(client.getPurchases().toString());
techniqueService.deleteAllTechniques();
final Technique tech1 = techniqueService.addTechnique("Computer",200000.0);
final Technique tech2 = techniqueService.addTechnique("Mobile phone",10000.0);
final Technique tech3 = techniqueService.addTechnique("Microwave",45000.0);
ArrayList<Technique> techniques=new ArrayList<>();
techniques.add(tech1);
techniques.add(tech2);
techniques.add(tech3);
Date date = new Date(1212121212121L);
final Purchase purchase= purchaseService.addPurchase(date,1,techniques);
log.info(purchase.toString());
final Purchase purchase1 = purchaseService.findPurchase(purchase.getId());
Assertions.assertEquals(true,purchase1.getTechnique().contains(tech1));
Assertions.assertEquals(purchase,purchase1);
log.info(purchase.getTechnique().toString());
Assertions.assertEquals(purchase1.getTechnique().size(), 3);
purchaseService.deleteAllPurchases();
Assertions.assertThrows(EntityNotFoundException.class, () -> purchaseService.findPurchase(-1L));
}
@Test
void testTecnhiques(){}
@Test
void testPurchases(){}