@@ -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