Skip to content

Commit c77c137

Browse files
committed
hibernate 5 module fix #439
1 parent d6cf8e8 commit c77c137

39 files changed

Lines changed: 3579 additions & 11 deletions

coverage-report/pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<configuration>
3434
<sources>
3535
<source>${project.parent.basedir}/jooby/src/main/java</source>
36-
<source>${project.parent.basedir}/jooby-hbm4/src/main/java</source>
36+
<source>${project.parent.basedir}/jooby-hbm/src/main/java</source>
3737
<source>${project.parent.basedir}/jooby-hbs/src/main/java</source>
3838
<source>${project.parent.basedir}/jooby-jackson/src/main/java</source>
3939
<source>${project.parent.basedir}/jooby-jdbc/src/main/java</source>
@@ -88,7 +88,7 @@
8888
<configuration>
8989
<sources>
9090
<source>${project.parent.basedir}/jooby/src/test/java</source>
91-
<source>${project.parent.basedir}/jooby-hbm4/src/test/java</source>
91+
<source>${project.parent.basedir}/jooby-hbm/src/test/java</source>
9292
<source>${project.parent.basedir}/jooby-hbs/src/test/java</source>
9393
<source>${project.parent.basedir}/jooby-jackson/src/test/java</source>
9494
<source>${project.parent.basedir}/jooby-jdbc/src/test/java</source>
@@ -152,7 +152,7 @@
152152
<directory>${project.parent.basedir}/jooby-hbs/src/test/resources</directory>
153153
</resource>
154154
<resource>
155-
<directory>${project.parent.basedir}/jooby-hbm4/src/test/resources</directory>
155+
<directory>${project.parent.basedir}/jooby-hbm/src/test/resources</directory>
156156
</resource>
157157
<resource>
158158
<directory>${project.parent.basedir}/jooby-whoops/src/test/resources</directory>
@@ -278,7 +278,7 @@
278278

279279
<dependency>
280280
<groupId>org.jooby</groupId>
281-
<artifactId>jooby-hbm4</artifactId>
281+
<artifactId>jooby-hbm</artifactId>
282282
<version>${project.version}</version>
283283
</dependency>
284284

coverage-report/src/test/java/org/jooby/hbm/HbmCustomFeature.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ public class HbmCustomFeature extends ServerFeature {
2020
use(ConfigFactory.empty()
2121
.withValue("db.audit", ConfigValueFactory.fromAnyRef("mem")));
2222

23-
use(new Hbm("db.audit", Member.class));
23+
use(new Hbm("db.audit").classes(Member.class));
24+
25+
use("*", Hbm.openSessionInView());
2426

2527
get("/members", req -> {
2628
EntityManager em = req.require(Key.get(EntityManager.class));
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package org.jooby.hbm;
2+
3+
import java.net.URISyntaxException;
4+
import java.util.stream.Collectors;
5+
6+
import javax.inject.Inject;
7+
import javax.persistence.EntityManager;
8+
import javax.persistence.TypedQuery;
9+
10+
import org.hibernate.event.spi.EventType;
11+
import org.hibernate.event.spi.PostLoadEvent;
12+
import org.hibernate.event.spi.PostLoadEventListener;
13+
import org.jooby.Results;
14+
import org.jooby.hbm.data.Member;
15+
import org.jooby.test.ServerFeature;
16+
import org.junit.Test;
17+
18+
import com.typesafe.config.ConfigFactory;
19+
import com.typesafe.config.ConfigValueFactory;
20+
21+
public class HbmEventListenerFeature extends ServerFeature {
22+
23+
public static class Service {
24+
public String alias() {
25+
return "post-load";
26+
}
27+
}
28+
29+
@SuppressWarnings("serial")
30+
public static class MemberPostLoad implements PostLoadEventListener {
31+
32+
private Service service;
33+
34+
@Inject
35+
public MemberPostLoad(final Service service) {
36+
this.service = service;
37+
}
38+
39+
@Override
40+
public void onPostLoad(final PostLoadEvent event) {
41+
Member member = (Member) event.getEntity();
42+
member.setAlias(service.alias());
43+
}
44+
45+
}
46+
47+
{
48+
use(ConfigFactory.empty()
49+
.withValue("db", ConfigValueFactory.fromAnyRef("mem")));
50+
51+
use(new Hbm()
52+
.onEvent(EventType.POST_LOAD, MemberPostLoad.class)
53+
.classes(Member.class));
54+
55+
use("*", Hbm.openSessionInView());
56+
57+
get("/members", req -> {
58+
EntityManager em = req.require(EntityManager.class);
59+
TypedQuery<Member> query = em.createQuery("from Member", Member.class);
60+
return query.getResultList().stream().map(m -> m.getAlias()).collect(Collectors.toList());
61+
});
62+
63+
post("/members", (req, rsp, chain) -> {
64+
Member member = req.params().to(Member.class);
65+
EntityManager em = req.require(EntityManager.class);
66+
em.persist(member);
67+
if (req.param("err").toOptional(Boolean.class).orElse(false)) {
68+
throw new IllegalArgumentException("Rollback on err");
69+
}
70+
// we do this way just to make sure the correct delegate got executed
71+
rsp.send(Results.with(member));
72+
chain.next(req, rsp);
73+
});
74+
}
75+
76+
@Test
77+
public void hbm() throws URISyntaxException, Exception {
78+
request()
79+
.post("/members")
80+
.form()
81+
.add("id", 1)
82+
.add("name", "pedro")
83+
.expect("pedro(1)");
84+
85+
request()
86+
.get("/members")
87+
.expect("[post-load]");
88+
}
89+
}

coverage-report/src/test/java/org/jooby/hbm/HbmFeature.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ public class HbmFeature extends ServerFeature {
1919
use(ConfigFactory.empty()
2020
.withValue("db", ConfigValueFactory.fromAnyRef("mem")));
2121

22-
use(new Hbm(Member.class));
22+
use(new Hbm().classes(Member.class));
23+
24+
use("*", Hbm.openSessionInView());
2325

2426
get("/members", req -> {
2527
EntityManager em = req.require(EntityManager.class);
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.jooby.hbm;
2+
3+
import java.net.URISyntaxException;
4+
import java.util.stream.Collectors;
5+
6+
import javax.persistence.EntityManager;
7+
import javax.persistence.TypedQuery;
8+
9+
import org.jooby.Results;
10+
import org.jooby.hbm.data.Member;
11+
import org.jooby.test.ServerFeature;
12+
import org.junit.Test;
13+
14+
import com.typesafe.config.ConfigFactory;
15+
import com.typesafe.config.ConfigValueFactory;
16+
17+
public class HbmJpaListenerFeature extends ServerFeature {
18+
19+
{
20+
use(ConfigFactory.empty()
21+
.withValue("db", ConfigValueFactory.fromAnyRef("mem")));
22+
23+
use(new Hbm()
24+
.classes(Member.class));
25+
26+
use("*", Hbm.openSessionInView());
27+
28+
get("/members", req -> {
29+
EntityManager em = req.require(EntityManager.class);
30+
TypedQuery<Member> query = em.createQuery("from Member", Member.class);
31+
return query.getResultList().stream().map(m -> m.getAlias()).collect(Collectors.toList());
32+
});
33+
34+
post("/members", (req, rsp, chain) -> {
35+
Member member = req.params().to(Member.class);
36+
EntityManager em = req.require(EntityManager.class);
37+
em.persist(member);
38+
if (req.param("err").toOptional(Boolean.class).orElse(false)) {
39+
throw new IllegalArgumentException("Rollback on err");
40+
}
41+
// we do this way just to make sure the correct delegate got executed
42+
rsp.send(Results.with(member));
43+
chain.next(req, rsp);
44+
});
45+
}
46+
47+
@Test
48+
public void hbm() throws URISyntaxException, Exception {
49+
request()
50+
.post("/members")
51+
.form()
52+
.add("id", 1)
53+
.add("name", "pedro")
54+
.expect("pedro(1)");
55+
56+
request()
57+
.get("/members")
58+
.expect("[post-load]");
59+
}
60+
}

coverage-report/src/test/java/org/jooby/hbm/HbmParamConverterFeature.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ public class HbmParamConverterFeature extends ServerFeature {
1717
use(ConfigFactory.empty()
1818
.withValue("db", ConfigValueFactory.fromAnyRef("mem")));
1919

20-
use(new Hbm(Member.class));
20+
use(new Hbm().classes(Member.class));
21+
22+
use("*", Hbm.openSessionInView());
2123

2224
parser((type, ctx) -> {
2325
if (type.getRawType() == Member.class) {

coverage-report/src/test/java/org/jooby/hbm/HbmProdEnvFeature.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ public class HbmProdEnvFeature extends ServerFeature {
2121
.withValue("db", ConfigValueFactory.fromAnyRef("mem"))
2222
.withValue("hibernate.hbm2ddl.auto", ConfigValueFactory.fromAnyRef("update")));
2323

24-
use(new Hbm(Member.class));
24+
use(new Hbm().classes(Member.class));
25+
26+
use("*", Hbm.openSessionInView());
2527

2628
get("/members", req -> {
2729
EntityManager em = req.require(EntityManager.class);

coverage-report/src/test/java/org/jooby/hbm/HbmScanFeature.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public class HbmScanFeature extends ServerFeature {
2121

2222
use(new Hbm().scan());
2323

24+
use("*", Hbm.openSessionInView());
25+
2426
get("/members", req -> {
2527
EntityManager em = req.require(EntityManager.class);
2628
Query query = em.createQuery("from Member");

coverage-report/src/test/java/org/jooby/hbm/data/Member.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,33 @@
33
import java.util.Optional;
44

55
import javax.persistence.Entity;
6+
import javax.persistence.EntityListeners;
67
import javax.persistence.Id;
78
import javax.persistence.Transient;
89

910
@Entity
11+
@EntityListeners(MemberListener.class)
1012
public class Member {
1113

1214
@Id
1315
private int id;
1416

1517
private String name;
1618

19+
@Transient
20+
private String alias;
21+
1722
@Transient
1823
public Optional<Boolean> viewErr = Optional.empty();
1924

25+
public String getAlias() {
26+
return alias;
27+
}
28+
29+
public void setAlias(final String alias) {
30+
this.alias = alias;
31+
}
32+
2033
public int getId() {
2134
return id;
2235
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.jooby.hbm.data;
2+
3+
import javax.inject.Inject;
4+
import javax.persistence.PostLoad;
5+
6+
public class MemberListener {
7+
public static class Service {
8+
public String alias() {
9+
return "post-load";
10+
}
11+
}
12+
13+
private Service service;
14+
15+
@Inject
16+
public MemberListener(final Service service) {
17+
this.service = service;
18+
}
19+
20+
@PostLoad
21+
public void onPostLoad(final Member member) {
22+
member.setAlias(service.alias());
23+
}
24+
}

0 commit comments

Comments
 (0)