Search in sources :

Example 1 with Item

use of org.jpwh.model.fetching.nplusoneselects.Item in project microservices by pwillhan.

the class NPlusOneSelects method storeTestData.

public FetchTestData storeTestData() throws Exception {
    UserTransaction tx = TM.getUserTransaction();
    tx.begin();
    EntityManager em = JPA.createEntityManager();
    Long[] itemIds = new Long[3];
    Long[] userIds = new Long[3];
    User johndoe = new User("johndoe");
    em.persist(johndoe);
    userIds[0] = johndoe.getId();
    User janeroe = new User("janeroe");
    em.persist(janeroe);
    userIds[1] = janeroe.getId();
    User robertdoe = new User("robertdoe");
    em.persist(robertdoe);
    userIds[2] = robertdoe.getId();
    Item item = new Item("Item One", CalendarUtil.TOMORROW.getTime(), johndoe);
    em.persist(item);
    itemIds[0] = item.getId();
    for (int i = 1; i <= 3; i++) {
        Bid bid = new Bid(item, robertdoe, new BigDecimal(9 + i));
        item.getBids().add(bid);
        em.persist(bid);
    }
    item = new Item("Item Two", CalendarUtil.TOMORROW.getTime(), johndoe);
    em.persist(item);
    itemIds[1] = item.getId();
    for (int i = 1; i <= 1; i++) {
        Bid bid = new Bid(item, janeroe, new BigDecimal(2 + i));
        item.getBids().add(bid);
        em.persist(bid);
    }
    item = new Item("Item Three", CalendarUtil.AFTER_TOMORROW.getTime(), janeroe);
    em.persist(item);
    itemIds[2] = item.getId();
    for (int i = 1; i <= 1; i++) {
        Bid bid = new Bid(item, johndoe, new BigDecimal(3 + i));
        item.getBids().add(bid);
        em.persist(bid);
    }
    tx.commit();
    em.close();
    FetchTestData testData = new FetchTestData();
    testData.items = new TestData(itemIds);
    testData.users = new TestData(userIds);
    return testData;
}
Also used : UserTransaction(javax.transaction.UserTransaction) Item(org.jpwh.model.fetching.nplusoneselects.Item) EntityManager(javax.persistence.EntityManager) User(org.jpwh.model.fetching.nplusoneselects.User) TestData(org.jpwh.shared.util.TestData) Bid(org.jpwh.model.fetching.nplusoneselects.Bid) BigDecimal(java.math.BigDecimal)

Example 2 with Item

use of org.jpwh.model.fetching.nplusoneselects.Item in project microservices by pwillhan.

the class NPlusOneSelects method fetchUsers.

@Test
public void fetchUsers() throws Exception {
    storeTestData();
    loadEventListener.reset();
    UserTransaction tx = TM.getUserTransaction();
    try {
        tx.begin();
        EntityManager em = JPA.createEntityManager();
        List<Item> items = em.createQuery("select i from Item i").getResultList();
        // select * from ITEM
        assertEquals(loadEventListener.getLoadCount(Item.class), 3);
        assertEquals(loadEventListener.getLoadCount(User.class), 0);
        for (Item item : items) {
            // Each seller has to be loaded with an additional SELECT
            assertNotNull(item.getSeller().getUsername());
        // select * from USERS where ID = ?
        }
        assertEquals(loadEventListener.getLoadCount(User.class), 2);
        tx.commit();
        em.close();
    } finally {
        TM.rollback();
    }
}
Also used : UserTransaction(javax.transaction.UserTransaction) Item(org.jpwh.model.fetching.nplusoneselects.Item) EntityManager(javax.persistence.EntityManager) User(org.jpwh.model.fetching.nplusoneselects.User) JPATest(org.jpwh.env.JPATest) Test(org.testng.annotations.Test)

Example 3 with Item

use of org.jpwh.model.fetching.nplusoneselects.Item in project microservices by pwillhan.

the class EagerQuery method fetchUsers.

@Test
public void fetchUsers() throws Exception {
    storeTestData();
    UserTransaction tx = TM.getUserTransaction();
    try {
        tx.begin();
        {
            EntityManager em = JPA.createEntityManager();
            List<Item> items = em.createQuery("select i from Item i join fetch i.seller").getResultList();
            // select i.*, u.*
            // from ITEM i
            // inner join USERS u on u.ID = i.SELLER_ID
            // where i.ID = ?
            // Detach all
            em.close();
            for (Item item : items) {
                assertNotNull(item.getSeller().getUsername());
            }
        }
        {
            EntityManager em = JPA.createEntityManager();
            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriaQuery criteria = cb.createQuery();
            Root<Item> i = criteria.from(Item.class);
            i.fetch("seller");
            criteria.select(i);
            List<Item> items = em.createQuery(criteria).getResultList();
            // Detach all
            em.close();
            for (Item item : items) {
                assertNotNull(item.getSeller().getUsername());
            }
        }
    } finally {
        TM.rollback();
    }
}
Also used : UserTransaction(javax.transaction.UserTransaction) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) Item(org.jpwh.model.fetching.nplusoneselects.Item) EntityManager(javax.persistence.EntityManager) Root(javax.persistence.criteria.Root) CriteriaQuery(javax.persistence.criteria.CriteriaQuery) List(java.util.List) JPATest(org.jpwh.env.JPATest) Test(org.testng.annotations.Test)

Example 4 with Item

use of org.jpwh.model.fetching.nplusoneselects.Item in project microservices by pwillhan.

the class NPlusOneSelects method fetchBids.

@Test
public void fetchBids() throws Exception {
    storeTestData();
    loadEventListener.reset();
    UserTransaction tx = TM.getUserTransaction();
    try {
        tx.begin();
        EntityManager em = JPA.createEntityManager();
        List<Item> items = em.createQuery("select i from Item i").getResultList();
        // select * from ITEM
        assertEquals(loadEventListener.getLoadCount(Item.class), 3);
        assertEquals(loadEventListener.getLoadCount(Bid.class), 0);
        for (Item item : items) {
            // Each bids collection has to be loaded with an additional SELECT
            assertTrue(item.getBids().size() > 0);
        // select * from BID where ITEM_ID = ?
        }
        assertEquals(loadEventListener.getLoadCount(Bid.class), 5);
        tx.commit();
        em.close();
    } finally {
        TM.rollback();
    }
}
Also used : UserTransaction(javax.transaction.UserTransaction) Item(org.jpwh.model.fetching.nplusoneselects.Item) EntityManager(javax.persistence.EntityManager) Bid(org.jpwh.model.fetching.nplusoneselects.Bid) JPATest(org.jpwh.env.JPATest) Test(org.testng.annotations.Test)

Example 5 with Item

use of org.jpwh.model.fetching.nplusoneselects.Item in project microservices by pwillhan.

the class EagerQuery method fetchBids.

@Test
public void fetchBids() throws Exception {
    storeTestData();
    UserTransaction tx = TM.getUserTransaction();
    try {
        tx.begin();
        {
            EntityManager em = JPA.createEntityManager();
            List<Item> items = em.createQuery("select i from Item i left join fetch i.bids").getResultList();
            // select i.*, b.*
            // from ITEM i
            // left outer join BID b on b.ITEM_ID = i.ID
            // where i.ID = ?
            // Detach all
            em.close();
            for (Item item : items) {
                assertTrue(item.getBids().size() > 0);
            }
        }
        {
            EntityManager em = JPA.createEntityManager();
            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriaQuery criteria = cb.createQuery();
            Root<Item> i = criteria.from(Item.class);
            i.fetch("bids", JoinType.LEFT);
            criteria.select(i);
            List<Item> items = em.createQuery(criteria).getResultList();
            // Detach all
            em.close();
            for (Item item : items) {
                assertTrue(item.getBids().size() > 0);
            }
        }
    } finally {
        TM.rollback();
    }
}
Also used : UserTransaction(javax.transaction.UserTransaction) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) Item(org.jpwh.model.fetching.nplusoneselects.Item) EntityManager(javax.persistence.EntityManager) Root(javax.persistence.criteria.Root) CriteriaQuery(javax.persistence.criteria.CriteriaQuery) List(java.util.List) JPATest(org.jpwh.env.JPATest) Test(org.testng.annotations.Test)

Aggregations

EntityManager (javax.persistence.EntityManager)6 UserTransaction (javax.transaction.UserTransaction)6 Item (org.jpwh.model.fetching.nplusoneselects.Item)6 JPATest (org.jpwh.env.JPATest)4 Test (org.testng.annotations.Test)4 Bid (org.jpwh.model.fetching.nplusoneselects.Bid)3 User (org.jpwh.model.fetching.nplusoneselects.User)3 BigDecimal (java.math.BigDecimal)2 List (java.util.List)2 CriteriaBuilder (javax.persistence.criteria.CriteriaBuilder)2 CriteriaQuery (javax.persistence.criteria.CriteriaQuery)2 Root (javax.persistence.criteria.Root)2 TestData (org.jpwh.shared.util.TestData)2