Skip to content

Commit d738f7d

Browse files
committed
Add BEFORE UPDATE triggers as well
1 parent 166a2d8 commit d738f7d

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

core/src/test/java/com/vladmihalcea/book/hpjp/hibernate/inheritance/SingleTableMySQLTriggerTest.java

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,23 @@ public void test() {
4444
try(Statement st = connection.createStatement()) {
4545
st.executeUpdate(
4646
"CREATE " +
47-
"TRIGGER post_content_check BEFORE INSERT " +
47+
"TRIGGER post_content_insert_check BEFORE INSERT " +
48+
"ON Topic " +
49+
"FOR EACH ROW " +
50+
"BEGIN " +
51+
" IF NEW.DTYPE = 'Post' " +
52+
" THEN " +
53+
" IF NEW.content IS NULL " +
54+
" THEN " +
55+
" signal sqlstate '45000' " +
56+
" set message_text = 'Post content cannot be NULL'; " +
57+
" END IF; " +
58+
" END IF; " +
59+
"END;"
60+
);
61+
st.executeUpdate(
62+
"CREATE " +
63+
"TRIGGER post_content_update_check BEFORE UPDATE " +
4864
"ON Topic " +
4965
"FOR EACH ROW " +
5066
"BEGIN " +
@@ -74,6 +90,22 @@ public void test() {
7490
" END IF; " +
7591
"END;"
7692
);
93+
st.executeUpdate(
94+
"CREATE " +
95+
"TRIGGER announcement_validUntil_update_check BEFORE UPDATE " +
96+
"ON Topic " +
97+
"FOR EACH ROW " +
98+
"BEGIN " +
99+
" IF NEW.DTYPE = 'Announcement' " +
100+
" THEN " +
101+
" IF NEW.validUntil IS NULL " +
102+
" THEN " +
103+
" signal sqlstate '45000' " +
104+
" set message_text = 'Announcement validUntil cannot be NULL'; " +
105+
" END IF; " +
106+
" END IF; " +
107+
"END;"
108+
);
77109
}
78110
});
79111

@@ -99,6 +131,26 @@ public void test() {
99131
entityManager.persist(announcement);
100132
});
101133

134+
try {
135+
doInJPA(entityManager -> {
136+
Post post = entityManager.createQuery("select p from Post p", Post.class).getSingleResult();
137+
post.setContent(null);
138+
});
139+
fail("content_check should fail");
140+
} catch (Exception expected) {
141+
assertEquals(PersistenceException.class, expected.getCause().getClass());
142+
}
143+
144+
try {
145+
doInJPA(entityManager -> {
146+
Announcement announcement = entityManager.createQuery("select a from Announcement a", Announcement.class).getSingleResult();
147+
announcement.setValidUntil(null);
148+
});
149+
fail("valid_until_check should fail");
150+
} catch (Exception expected) {
151+
assertEquals(PersistenceException.class, expected.getCause().getClass());
152+
}
153+
102154
try {
103155
doInJPA(entityManager -> {
104156
entityManager.persist(new Post());

0 commit comments

Comments
 (0)