/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.test.subselect.join; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.testing.TestForIssue; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import static org.junit.Assert.assertEquals; public class SubselectInJoinedTableTest extends BaseCoreFunctionalTestCase { @Override protected String[] getMappings() { return new String[] { "subselect/join/Order.hbm.xml" }; } @Test @TestForIssue( jiraKey = "HHH-10998") public void testSubselectInJoinedTable() { OrderEntry orderEntry1 = new OrderEntry(); orderEntry1.setOrderEntryId( 1L ); OrderEntry orderEntry2 = new OrderEntry(); orderEntry2.setOrderEntryId( 2L ); Order order = new Order(); order.setOrderId( 3L ); order.getOrderEntries().add( orderEntry1 ); order.getOrderEntries().add( orderEntry2 ); order.setFirstOrderEntry( orderEntry1 ); Session s = openSession(); Transaction tx = s.beginTransaction(); s.persist( orderEntry1 ); s.persist( orderEntry2 ); s.persist( order ); tx.commit(); s.close(); s = openSession(); s.getTransaction().begin(); order = (Order) s.get( Order.class, order.getOrderId() ); assertEquals( orderEntry1.getOrderEntryId(), order.getFirstOrderEntry().getOrderEntryId() ); assertEquals( 2, order.getOrderEntries().size() ); assertEquals( orderEntry1.getOrderEntryId(), order.getOrderEntries().get( 0 ).getOrderEntryId() ); assertEquals( orderEntry2.getOrderEntryId(), order.getOrderEntries().get( 1 ).getOrderEntryId() ); s.getTransaction().commit(); s.close(); } public static class Order { private Long orderId; private OrderEntry firstOrderEntry; private List<OrderEntry> orderEntries = new ArrayList<OrderEntry>(); public OrderEntry getFirstOrderEntry() { return firstOrderEntry; } public void setFirstOrderEntry(OrderEntry firstOrderEntry) { this.firstOrderEntry = firstOrderEntry; } public Long getOrderId() { return orderId; } public void setOrderId(Long orderId) { this.orderId = orderId; } public List<OrderEntry> getOrderEntries() { return orderEntries; } public void setOrderEntries(List<OrderEntry> orderEntries) { this.orderEntries = orderEntries; } } public static class OrderEntry { private Long orderEntryId; public Long getOrderEntryId() { return orderEntryId; } public void setOrderEntryId(Long orderEntryId) { this.orderEntryId = orderEntryId; } } }