8
8
import jakarta .persistence .Id ;
9
9
import org .hibernate .annotations .Formula ;
10
10
import org .hibernate .annotations .Generated ;
11
+ import org .hibernate .generator .EventType ;
11
12
import org .hibernate .testing .orm .junit .DomainModel ;
12
13
import org .hibernate .testing .orm .junit .SessionFactory ;
13
14
import org .hibernate .testing .orm .junit .SessionFactoryScope ;
@@ -37,19 +38,32 @@ public void test(SessionFactoryScope scope) {
37
38
assertEquals ( "new" , entity .status );
38
39
assertEquals ( unitPrice , entity .unitPrice );
39
40
assertEquals ( 5 , entity .quantity );
41
+ assertEquals ( 64.95f , entity .total .floatValue (), 0.01f );
40
42
} );
41
43
scope .inTransaction ( session -> {
42
44
OrderLine entity = session .createQuery ("from WithDefault" , OrderLine .class ).getSingleResult ();
43
45
assertEquals ( unitPrice , entity .unitPrice );
44
46
assertEquals ( 5 , entity .quantity );
45
47
assertEquals ( "new" , entity .status );
48
+ assertEquals ( 64.95f , entity .total .floatValue (), 0.01f );
46
49
entity .status = "old" ; //should be ignored when fetch=true
47
50
} );
48
51
scope .inTransaction ( session -> {
49
52
OrderLine entity = session .createQuery ("from WithDefault" , OrderLine .class ).getSingleResult ();
50
53
assertEquals ( unitPrice , entity .unitPrice );
51
54
assertEquals ( 5 , entity .quantity );
52
55
assertEquals ( "new" , entity .status );
56
+ assertEquals ( 64.95f , entity .total .floatValue (), 0.01f );
57
+ entity .quantity = 10 ;
58
+ session .flush ();
59
+ assertEquals ( 129.90f , entity .total .floatValue (), 0.01f );
60
+ } );
61
+ scope .inTransaction ( session -> {
62
+ OrderLine entity = session .createQuery ("from WithDefault" , OrderLine .class ).getSingleResult ();
63
+ assertEquals ( unitPrice , entity .unitPrice );
64
+ assertEquals ( 10 , entity .quantity );
65
+ assertEquals ( "new" , entity .status );
66
+ assertEquals ( 129.90f , entity .total .floatValue (), 0.01f );
53
67
} );
54
68
}
55
69
@@ -61,12 +75,16 @@ public void dropTestData(SessionFactoryScope scope) {
61
75
@ Entity (name ="WithDefault" )
62
76
public static class OrderLine {
63
77
@ Id
78
+ private long id ;
64
79
private BigDecimal unitPrice ;
65
- @ Id
66
80
private int quantity = 1 ;
67
81
@ Generated
68
82
@ Formula (value = "'new'" )
69
83
private String status ;
84
+ @ Generated (event = {EventType .INSERT , EventType .UPDATE })
85
+ @ Formula (value = "quantity*unitPrice" )
86
+ private BigDecimal total ;
87
+
70
88
71
89
public OrderLine () {}
72
90
public OrderLine (BigDecimal unitPrice , int quantity ) {
0 commit comments