⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 persistentstatetransitions.java

📁 网上拍卖系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package auction.test.basic;import auction.model.*;import auction.dao.*;import auction.persistence.HibernateUtil;import auction.exceptions.BusinessException;import auction.exceptions.PermissionException;import auction.test.HibernateIntegrationTest;import org.hibernate.*;import org.testng.annotations.*;import org.dbunit.operation.DatabaseOperation;import java.util.*;import java.math.BigDecimal;/** * Load and store various objects to see if they change state correctly. * * @author Christian Bauer */public class PersistentStateTransitions extends HibernateIntegrationTest {    DAOFactory daoFactory = DAOFactory.instance(DAOFactory.HIBERNATE);    protected void prepareSettings() {        dataSetLocation = "auction/test/basedata.xml";        beforeTestOperations.add(DatabaseOperation.CLEAN_INSERT);    }    @Test(groups = "integration-hibernate")    public void storeAndLoadItem() {        // Start a unit of work        HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();        // Prepare the DAOs        ItemDAO itemDAO = daoFactory.getItemDAO();        UserDAO userDAO = daoFactory.getUserDAO();        // Prepare a user object        User user = userDAO.findById(1l, false);        // Make a new auction item persistent        Calendar startDate = GregorianCalendar.getInstance();        Calendar endDate = GregorianCalendar.getInstance();        endDate.add(Calendar.DAY_OF_YEAR, 3);        MonetaryAmount initialPrice =            new MonetaryAmount(new BigDecimal(123), Currency.getInstance("USD"));        MonetaryAmount reservePrice =            new MonetaryAmount(new BigDecimal(333), Currency.getInstance("USD"));        Item newItem =            new Item( "Testitem", "Test Description", user,                      initialPrice, reservePrice,                      startDate.getTime(), endDate.getTime() );        itemDAO.makePersistent(newItem);        // End the unit of work        HibernateUtil.getSessionFactory().getCurrentSession()                        .getTransaction().commit();        // Direct SQL query for database state in auto-commit mode        StatelessSession s = HibernateUtil.getSessionFactory().openStatelessSession();        Object[] result = (Object[])                s.createSQLQuery("select INITIAL_PRICE ip," +                                 "       SELLER_ID sid from ITEM where ITEM_ID = :itemid")                  .addScalar("ip",  Hibernate.BIG_DECIMAL)                  .addScalar("sid", Hibernate.LONG)                  .setParameter("itemid", newItem.getId())                  .uniqueResult();        s.close();        // Assert correctness of state        assert result[0].getClass() == BigDecimal.class;        assert result[0].equals( newItem.getInitialPrice().getValue() );        assert result[1].equals( 1l );    }    @Test(groups = "integration-hibernate")    public void manualCastOfBillingDetails() {        // Start a unit of work        HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();        // Prepare the DAOs        UserDAO userDAO = daoFactory.getUserDAO();        User user = userDAO.findById(1l, false);        // An (instanceof CreditCard) check to user.defaultBillingDetails would fail...        // load() trick to retrieve the subclass instance, replacing the superclass proxy        CreditCard cc = (CreditCard) HibernateUtil.getSessionFactory().getCurrentSession()                .load(CreditCard.class, user.getDefaultBillingDetails().getId());        assert cc.getType().equals(CreditCardType.MASTERCARD);        // The previous operation produced a warning, because object identity has now been violated,        // one database row (well, several if it's a joined hierarchy mapping) is now represented        // by _two_ instances in-memory:        assert user.getDefaultBillingDetails() != cc;        // End the unit of work        HibernateUtil.getSessionFactory().getCurrentSession()                        .getTransaction().commit();    }    @Test(groups = "integration-hibernate")    public void createShipmentWithoutAuction() {        // Start a unit of work        HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();        // Prepare the DAOs        UserDAO userDAO = daoFactory.getUserDAO();        ShipmentDAO shipDAO = daoFactory.getShipmentDAO();        User user1 = userDAO.findById(1l, false);        User user2 = userDAO.findById(2l, false);        // User 1 buys from User 2        Shipment newShipment = new Shipment(user1.getShippingAddress(),                                            user1, user2, 5);        shipDAO.makePersistent(newShipment);        // End the unit of work        HibernateUtil.getSessionFactory().getCurrentSession()                        .getTransaction().commit();        // Direct SQL query for database state in auto-commit mode        StatelessSession s = HibernateUtil.getSessionFactory().openStatelessSession();        Object[] result = (Object[])                s.createSQLQuery("select BUYER_ID buyerId," +                                 "       SELLER_ID sellerId from SHIPMENT where SHIPMENT_ID = :shipId")                  .addScalar("buyerId",  Hibernate.LONG)                  .addScalar("sellerId", Hibernate.LONG)                  .setParameter("shipId", newShipment.getId())                  .uniqueResult();        s.close();        // Assert correctness of state        assert result[0].equals( 1l );        assert result[1].equals( 2l );    }    @Test(groups = "integration-hibernate")    public void createShipmentForAuction() {        // Start a unit of work        HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();        // Prepare the DAOs        UserDAO userDAO = daoFactory.getUserDAO();        ShipmentDAO shipDAO = daoFactory.getShipmentDAO();        ItemDAO itemDAO = daoFactory.getItemDAO();        User user1 = userDAO.findById(1l, false);        User user2 = userDAO.findById(2l, false);        Item item = itemDAO.findById(1l, false);        // User 1 buys from User 2        Shipment newShipment = new Shipment(user1.getShippingAddress(),                                            user1, user2, 5);        newShipment.setAuction(item);        shipDAO.makePersistent(newShipment);        // End the unit of work        HibernateUtil.getSessionFactory().getCurrentSession()                        .getTransaction().commit();        // Direct SQL query for database state in auto-commit mode        StatelessSession s = HibernateUtil.getSessionFactory().openStatelessSession();        Object[] result = (Object[])                s.createSQLQuery("select ITEM_ID itemId," +                                 "       SHIPMENT_ID shipmentId from ITEM_SHIPMENT")                  .addScalar("itemId",  Hibernate.LONG)                  .addScalar("shipmentId", Hibernate.LONG)                  .uniqueResult();        s.close();        // Assert correctness of state        assert result[0].equals( 1l );        assert result[1].equals( newShipment.getId() );    }    @Test(groups = "integration-hibernate")    public void eagerFetchCategorizedItems() {        // Start a unit of work        HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();        // Query for Category and all categorized Items (three tables joined)        Query q = HibernateUtil.getSessionFactory().getCurrentSession()                .createQuery("select c from Category as c" +                        " left join fetch c.categorizedItems as ci" +                        " join fetch ci.item as i");        Collection<Category> result = new HashSet<Category>(q.list());        assert result.size() == 2;        // End the unit of work        HibernateUtil.getSessionFactory().getCurrentSession()                        .getTransaction().commit();        // Check detached state (graph should be eager fetched)        for (Category cat : result) {            for (CategorizedItem categorizedItem : cat.getCategorizedItems()) {                assert categorizedItem != null;                assert categorizedItem.getItem() != null;            }        }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -