Search in sources :

Example 6 with SimpleSelect

use of org.hibernate.sql.SimpleSelect in project hibernate-orm by hibernate.

the class PersistentListTest method testInverseListIndex2.

@Test
@TestForIssue(jiraKey = "HHH-5732")
public void testInverseListIndex2() {
    // make sure no one changes the mapping
    final CollectionPersister collectionPersister = sessionFactory().getCollectionPersister(Order.class.getName() + ".lineItems");
    assertTrue(collectionPersister.isInverse());
    // do some creations...
    Session session = openSession();
    session.beginTransaction();
    Order order = new Order("acme-1");
    order.addLineItem("abc", 2);
    order.addLineItem("def", 200);
    order.addLineItem("ghi", 13);
    session.save(order);
    session.getTransaction().commit();
    session.close();
    // now, make sure the list-index column gotten written...
    final Session session2 = openSession();
    session2.beginTransaction();
    session2.doWork(new Work() {

        @Override
        public void execute(Connection connection) throws SQLException {
            final QueryableCollection queryableCollection = (QueryableCollection) collectionPersister;
            SimpleSelect select = new SimpleSelect(getDialect()).setTableName(queryableCollection.getTableName()).addColumn("ORDER_ID").addColumn("INDX").addColumn("PRD_CODE");
            PreparedStatement preparedStatement = ((SessionImplementor) session2).getJdbcCoordinator().getStatementPreparer().prepareStatement(select.toStatementString());
            ResultSet resultSet = ((SessionImplementor) session2).getJdbcCoordinator().getResultSetReturn().extract(preparedStatement);
            Map<String, Integer> valueMap = new HashMap<String, Integer>();
            while (resultSet.next()) {
                final int fk = resultSet.getInt(1);
                assertFalse("Collection key (FK) column was null", resultSet.wasNull());
                final int indx = resultSet.getInt(2);
                assertFalse("List index column was null", resultSet.wasNull());
                final String prodCode = resultSet.getString(3);
                assertFalse("Prod code column was null", resultSet.wasNull());
                valueMap.put(prodCode, indx);
            }
            assertEquals(3, valueMap.size());
            assertEquals(Integer.valueOf(0), valueMap.get("abc"));
            assertEquals(Integer.valueOf(1), valueMap.get("def"));
            assertEquals(Integer.valueOf(2), valueMap.get("ghi"));
        }
    });
    session2.delete(order);
    session2.getTransaction().commit();
    session2.close();
}
Also used : SQLException(java.sql.SQLException) Connection(java.sql.Connection) QueryableCollection(org.hibernate.persister.collection.QueryableCollection) PreparedStatement(java.sql.PreparedStatement) CollectionPersister(org.hibernate.persister.collection.CollectionPersister) Work(org.hibernate.jdbc.Work) ResultSet(java.sql.ResultSet) SimpleSelect(org.hibernate.sql.SimpleSelect) HashMap(java.util.HashMap) Map(java.util.Map) Session(org.hibernate.Session) Test(org.junit.Test) TestForIssue(org.hibernate.testing.TestForIssue)

Aggregations

SimpleSelect (org.hibernate.sql.SimpleSelect)6 PreparedStatement (java.sql.PreparedStatement)3 ResultSet (java.sql.ResultSet)3 SQLException (java.sql.SQLException)3 HashMap (java.util.HashMap)3 LockOptions (org.hibernate.LockOptions)3 Session (org.hibernate.Session)3 SessionFactoryImplementor (org.hibernate.engine.spi.SessionFactoryImplementor)3 CollectionPersister (org.hibernate.persister.collection.CollectionPersister)3 QueryableCollection (org.hibernate.persister.collection.QueryableCollection)3 TestForIssue (org.hibernate.testing.TestForIssue)3 Test (org.junit.Test)3 Connection (java.sql.Connection)2 Map (java.util.Map)2 Work (org.hibernate.jdbc.Work)2 SessionImplementor (org.hibernate.engine.spi.SessionImplementor)1