package pl.com.bottega.documentmanagement.api;
import com.google.common.collect.Sets;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import pl.com.bottega.documentmanagement.domain.*;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.List;
import java.util.UUID;
/**
* Created by maciuch on 30.07.16.
*/
@Service
public class NPlus1SelectSimulator {
@PersistenceContext
private EntityManager entityManager;
@Autowired
private PrintCostCalculator printCostCalculator;
@Transactional
public void insertTestData() {
Employee employee = new Employee(randomString(), randomString(), new EmployeeId(12382L));
entityManager.persist(employee);
for(int i = 0; i < 1000; i++) {
Document d = new Document(
new DocumentNumber(randomString()), randomString(), randomString(), employee, printCostCalculator
);
d.tag(Sets.newHashSet(new Tag("one"), new Tag("two"), new Tag("three")));
entityManager.persist(d);
}
}
@Transactional
public void simulate() {
Query query = entityManager.createQuery("FROM Document d JOIN fetch d.tags", Document.class).setMaxResults(10);
List<Document> docuemnts = query.getResultList();
for(Document d : docuemnts) {
System.out.print(d.toString() + " ");
for(Tag t : d.tags()) {
System.out.print(t.toString() + " ");
}
System.out.println();
}
}
@Transactional
public Document getDocument() {
Query query = entityManager.createQuery("FROM Document d");
query.setMaxResults(1);
Document d = (Document) query.getResultList().get(0);
System.out.println(d.verificator().toString());
System.out.println(d.tags().size());
return d;
}
private String randomString() {
return UUID.randomUUID().toString();
}
}