3 лаба (Многие ко многим) (вроде работает).
This commit is contained in:
parent
0df1eca957
commit
f0e3f4374b
@ -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() {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
@ -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(){}
|
||||
|
Loading…
Reference in New Issue
Block a user