Skip to content

Commit ca70301

Browse files
committed
HHH-19524 Add test for issue
1 parent 369c4ec commit ca70301

File tree

3 files changed

+465
-12
lines changed

3 files changed

+465
-12
lines changed
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.jpa.query;
6+
7+
import jakarta.persistence.CascadeType;
8+
import jakarta.persistence.Column;
9+
import jakarta.persistence.Entity;
10+
import jakarta.persistence.FetchType;
11+
import jakarta.persistence.Id;
12+
import jakarta.persistence.JoinColumn;
13+
import jakarta.persistence.OneToOne;
14+
import jakarta.persistence.Table;
15+
import org.hibernate.testing.orm.junit.DomainModel;
16+
import org.hibernate.testing.orm.junit.JiraKey;
17+
import org.hibernate.testing.orm.junit.SessionFactory;
18+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
19+
import org.junit.jupiter.api.AfterEach;
20+
import org.junit.jupiter.api.BeforeEach;
21+
import org.junit.jupiter.api.Test;
22+
23+
import java.math.BigDecimal;
24+
import java.util.List;
25+
26+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
27+
28+
@DomainModel(
29+
annotatedClasses = {
30+
NativeQueryJoinTest.Order.class,
31+
NativeQueryJoinTest.OrderInfo.class,
32+
}
33+
)
34+
@SessionFactory
35+
@JiraKey("HHH-19524")
36+
public class NativeQueryJoinTest {
37+
38+
private static final long ORDER_ID = 1L;
39+
private static final long ORDER_INFO_ID = 2L;
40+
private static final String ORDER_INFO_DESCRIPTION = "first order";
41+
42+
@BeforeEach
43+
public void setup(SessionFactoryScope scope) {
44+
scope.inTransaction(
45+
session -> {
46+
OrderInfo additionalInfo = new OrderInfo(
47+
new BigDecimal( ORDER_INFO_ID ),
48+
ORDER_INFO_DESCRIPTION
49+
);
50+
Order order = new Order( ORDER_ID, 1L, additionalInfo );
51+
session.persist( order );
52+
}
53+
);
54+
}
55+
56+
@AfterEach
57+
public void teardown(SessionFactoryScope scope) {
58+
scope.getSessionFactory().getSchemaManager().truncateMappedObjects();
59+
}
60+
61+
@Test
62+
public void testFind(SessionFactoryScope scope) {
63+
scope.inTransaction(
64+
session -> {
65+
Order order = session.find( Order.class, ORDER_ID );
66+
OrderInfo additionalInfo = order.getOrderInfo();
67+
assertThat( additionalInfo.getDescription() ).isEqualTo( ORDER_INFO_DESCRIPTION );
68+
} );
69+
}
70+
71+
@Test
72+
public void testQuery(SessionFactoryScope scope) {
73+
scope.inTransaction(
74+
session -> {
75+
List<Long> ids = session.createQuery("select o.orderId from Order o", Long.class ).list();
76+
session.createMutationQuery( "update Order set description = :des" ).setParameter( "des", "abc" ).executeUpdate();
77+
} );
78+
}
79+
80+
@Test
81+
public void testNativeQuery(SessionFactoryScope scope) {
82+
scope.inTransaction(
83+
session -> {
84+
String query = "select o.* from ORDER_TABLE o where o.ORDER_ID = ?1";
85+
List<Order> orders = session.createNativeQuery( query, Order.class )
86+
.setParameter( 1, ORDER_ID )
87+
.list();
88+
Order order = orders.get( 0 );
89+
OrderInfo additionalInfo = order.getOrderInfo();
90+
assertThat( additionalInfo.getDescription() ).isEqualTo( ORDER_INFO_DESCRIPTION );
91+
} );
92+
}
93+
94+
@Table(name = "ORDER_TABLE")
95+
@Entity(name = "Order")
96+
public static class Order {
97+
98+
@Id
99+
@Column(name = "ORDER_ID")
100+
private Long orderId;
101+
102+
private long orderNumber;
103+
104+
private String description;
105+
106+
@OneToOne(mappedBy = "order", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
107+
private OrderInfo orderInfo;
108+
109+
public Order() {
110+
}
111+
112+
public Long getOrderId() {
113+
return orderId;
114+
}
115+
116+
public long getOrderNumber() {
117+
return orderNumber;
118+
}
119+
120+
public OrderInfo getOrderInfo() {
121+
return orderInfo;
122+
}
123+
124+
public Order(Long orderId, long orderNumber, OrderInfo additionalInfo) {
125+
this.orderId = orderId;
126+
this.orderNumber = orderNumber;
127+
this.orderInfo = additionalInfo;
128+
additionalInfo.order = this;
129+
}
130+
}
131+
132+
@Entity(name = "OrderInfo")
133+
@Table(name = "ORDER_INFO_TABLE")
134+
public static class OrderInfo {
135+
136+
@Id
137+
@Column(name = "ORDER_INFO_ID")
138+
private BigDecimal orderInfoId;
139+
140+
private String description;
141+
142+
@OneToOne(fetch = FetchType.LAZY)
143+
@JoinColumn(name = "ORDER_ID")
144+
private Order order;
145+
146+
public OrderInfo() {
147+
}
148+
149+
public OrderInfo(BigDecimal orderInfoId, String description) {
150+
this.orderInfoId = orderInfoId;
151+
this.description = description;
152+
}
153+
154+
public BigDecimal getOrderInfoId() {
155+
return orderInfoId;
156+
}
157+
158+
public String getDescription() {
159+
return description;
160+
}
161+
162+
public Order getOrder() {
163+
return order;
164+
}
165+
}
166+
}

0 commit comments

Comments
 (0)