Skip to content

Commit 26ec7ea

Browse files
committed
unit tests for #70
1 parent 33afa0f commit 26ec7ea

File tree

6 files changed

+258
-0
lines changed

6 files changed

+258
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.fasterxml.jackson.datatype.hibernate4;
2+
3+
import javax.persistence.EntityManager;
4+
import javax.persistence.EntityManagerFactory;
5+
import javax.persistence.Persistence;
6+
7+
import org.hibernate.Hibernate;
8+
import org.junit.Test;
9+
10+
import com.fasterxml.jackson.databind.ObjectMapper;
11+
import com.fasterxml.jackson.datatype.hibernate4.data.Contrato;
12+
13+
public class InfiniteRecursionTest extends BaseTest {
14+
15+
// [Issue#70]
16+
@Test
17+
public void testInfinite() throws Exception {
18+
19+
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit");
20+
String expected = "{\"id\":1,\"numeroContrato\":\"100001-9\",\"parcelas\":[{\"id\":1,\"numeroParcela\":1}],\"liquidacoes\":[{\"id\":1,\"valorTotal\":10000,\"parcela\":{\"id\":1,\"numeroParcela\":1}}]}";
21+
22+
try {
23+
EntityManager em = emf.createEntityManager();
24+
ObjectMapper mapper = mapperWithModule(true);
25+
26+
final Contrato contrato1 = em.find(Contrato.class, 1L);
27+
Hibernate.initialize(contrato1.getParcelas());
28+
Hibernate.initialize(contrato1.getLiquidacoes());
29+
assertEquals(expected, mapper.writer().writeValueAsString(contrato1));
30+
31+
em.clear();
32+
33+
final Contrato contrato2 = em.find(Contrato.class, 1L);
34+
Hibernate.initialize(contrato2.getLiquidacoes());
35+
Hibernate.initialize(contrato2.getParcelas());
36+
assertEquals(expected, mapper.writer().writeValueAsString(contrato2));
37+
38+
39+
} finally {
40+
emf.close();
41+
}
42+
43+
}
44+
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.fasterxml.jackson.datatype.hibernate4.data;
2+
3+
import java.util.List;
4+
5+
import javax.persistence.Column;
6+
import javax.persistence.Entity;
7+
import javax.persistence.Id;
8+
import javax.persistence.OneToMany;
9+
import javax.persistence.Table;
10+
11+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
12+
13+
@Entity @Table(name="Contrato", catalog="classicmodels")
14+
public class Contrato {
15+
16+
@Id
17+
private Long id;
18+
19+
@Column(name="numero_contrato")
20+
private String numeroContrato;
21+
22+
@OneToMany(mappedBy="contrato") @JsonIgnoreProperties("contrato")
23+
private List<Parcela> parcelas;
24+
25+
@OneToMany(mappedBy="contrato") @JsonIgnoreProperties("contrato")
26+
private List<Liquidacao> liquidacoes;
27+
28+
public Long getId() {
29+
return id;
30+
}
31+
32+
public void setId(Long id) {
33+
this.id = id;
34+
}
35+
36+
public String getNumeroContrato() {
37+
return numeroContrato;
38+
}
39+
40+
public void setNumeroContrato(String numeroContrato) {
41+
this.numeroContrato = numeroContrato;
42+
}
43+
44+
public List<Parcela> getParcelas() {
45+
return parcelas;
46+
}
47+
48+
public void setParcelas(List<Parcela> parcelas) {
49+
this.parcelas = parcelas;
50+
}
51+
52+
public List<Liquidacao> getLiquidacoes() {
53+
return liquidacoes;
54+
}
55+
56+
public void setLiquidacoes(List<Liquidacao> liquidacoes) {
57+
this.liquidacoes = liquidacoes;
58+
}
59+
60+
61+
62+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.fasterxml.jackson.datatype.hibernate4.data;
2+
3+
import java.math.BigDecimal;
4+
5+
import javax.persistence.Column;
6+
import javax.persistence.Entity;
7+
import javax.persistence.FetchType;
8+
import javax.persistence.Id;
9+
import javax.persistence.JoinColumn;
10+
import javax.persistence.ManyToOne;
11+
import javax.persistence.Table;
12+
13+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
14+
15+
@Entity @Table(name="Liquidacao", catalog="classicmodels")
16+
public class Liquidacao {
17+
18+
@Id
19+
private Long id;
20+
21+
@Column(name="valor_total")
22+
private BigDecimal valorTotal;
23+
24+
@ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="contrato_id")
25+
private Contrato contrato;
26+
27+
@ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="parcela_id") @JsonIgnoreProperties("contrato")
28+
private Parcela parcela;
29+
30+
public Long getId() {
31+
return id;
32+
}
33+
34+
public void setId(Long id) {
35+
this.id = id;
36+
}
37+
38+
public BigDecimal getValorTotal() {
39+
return valorTotal;
40+
}
41+
42+
public void setValorTotal(BigDecimal valorTotal) {
43+
this.valorTotal = valorTotal;
44+
}
45+
46+
public Contrato getContrato() {
47+
return contrato;
48+
}
49+
50+
public void setContrato(Contrato contrato) {
51+
this.contrato = contrato;
52+
}
53+
54+
public Parcela getParcela() {
55+
return parcela;
56+
}
57+
58+
public void setParcela(Parcela parcela) {
59+
this.parcela = parcela;
60+
}
61+
62+
63+
64+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.fasterxml.jackson.datatype.hibernate4.data;
2+
3+
import javax.persistence.Column;
4+
import javax.persistence.Entity;
5+
import javax.persistence.FetchType;
6+
import javax.persistence.Id;
7+
import javax.persistence.JoinColumn;
8+
import javax.persistence.ManyToOne;
9+
import javax.persistence.Table;
10+
11+
@Entity @Table(name="Parcela", catalog="classicmodels")
12+
public class Parcela {
13+
14+
@Id
15+
private Long id;
16+
17+
@Column(name="numero_parcela")
18+
private Integer numeroParcela;
19+
20+
@ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="contrato_id")
21+
private Contrato contrato;
22+
23+
public Long getId() {
24+
return id;
25+
}
26+
27+
public void setId(Long id) {
28+
this.id = id;
29+
}
30+
31+
public Integer getNumeroParcela() {
32+
return numeroParcela;
33+
}
34+
35+
public void setNumeroParcela(Integer numeroParcela) {
36+
this.numeroParcela = numeroParcela;
37+
}
38+
39+
public Contrato getContrato() {
40+
return contrato;
41+
}
42+
43+
public void setContrato(Contrato contrato) {
44+
this.contrato = contrato;
45+
}
46+
47+
48+
49+
50+
}

hibernate4/src/test/resources/META-INF/persistence.xml

+3
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66

77
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
88
<provider>org.hibernate.ejb.HibernatePersistence</provider>
9+
<class>com.fasterxml.jackson.datatype.hibernate4.data.Contrato</class>
910
<class>com.fasterxml.jackson.datatype.hibernate4.data.Customer</class>
1011
<class>com.fasterxml.jackson.datatype.hibernate4.data.Employee</class>
12+
<class>com.fasterxml.jackson.datatype.hibernate4.data.Liquidacao</class>
1113
<class>com.fasterxml.jackson.datatype.hibernate4.data.Office</class>
1214
<class>com.fasterxml.jackson.datatype.hibernate4.data.Order</class>
1315
<class>com.fasterxml.jackson.datatype.hibernate4.data.OrderDetail</class>
1416
<class>com.fasterxml.jackson.datatype.hibernate4.data.OrderDetailId</class>
17+
<class>com.fasterxml.jackson.datatype.hibernate4.data.Parcela</class>
1518
<class>com.fasterxml.jackson.datatype.hibernate4.data.Payment</class>
1619
<class>com.fasterxml.jackson.datatype.hibernate4.data.PaymentId</class>
1720
<class>com.fasterxml.jackson.datatype.hibernate4.data.Product</class>

hibernate4/src/test/resources/classicmodels.sql

+34
Original file line numberDiff line numberDiff line change
@@ -3979,6 +3979,40 @@ INSERT INTO `classicmodels`.`Product` (`productCode`,`productName`,`productLine`
39793979
('S72_1253','Boeing X-32A JSF','Planes','1:72','Motor City Art Classics','10\" Wingspan with retractable landing gears.Comes with pilot',4857,32.77,49.66),
39803980
('S72_3212','Pont Yacht','Ships','1:72','Unimax Art Galleries','Measures 38 inches Long x 33 3/4 inches High. Includes a stand.\r\nMany extras including rigging, long boats, pilot house, anchors, etc. Comes with 2 masts, all square-rigged',414,33.3,54.6);
39813981

3982+
3983+
DROP TABLE IF EXISTS `classicmodels`.`Contrato`;
3984+
CREATE TABLE `classicmodels`.`Contrato` (
3985+
`id` numeric(10) NOT NULL,
3986+
`numero_contrato` varchar(50) NOT NULL,
3987+
PRIMARY KEY (`id`)
3988+
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
3989+
INSERT INTO `classicmodels`.`Contrato` (`id`,`numero_contrato`) VALUES
3990+
(1, '100001-9');
3991+
3992+
DROP TABLE IF EXISTS `classicmodels`.`Parcela`;
3993+
CREATE TABLE `classicmodels`.`Parcela` (
3994+
`id` numeric(10) NOT NULL,
3995+
`numero_parcela` numeric(10) NOT NULL,
3996+
`contrato_id` numeric(10) NOT NULL,
3997+
PRIMARY KEY (`id`)
3998+
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
3999+
INSERT INTO `classicmodels`.`Parcela` (`id`,`numero_parcela`,`contrato_id`) VALUES
4000+
(1, 1, 1);
4001+
4002+
DROP TABLE IF EXISTS `classicmodels`.`Liquidacao`;
4003+
CREATE TABLE `classicmodels`.`Liquidacao` (
4004+
`id` numeric(10) NOT NULL,
4005+
`valor_total` numeric(10) NOT NULL,
4006+
`contrato_id` numeric(10) NOT NULL,
4007+
`parcela_id` numeric(10) NULL,
4008+
PRIMARY KEY (`id`)
4009+
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
4010+
INSERT INTO `classicmodels`.`Liquidacao` (`id`,`valor_total`,`contrato_id`, `parcela_id`) VALUES
4011+
(1, 10000, 1, 1);
4012+
4013+
4014+
4015+
39824016
-- Return to H2 regular mode
39834017
SET MODE REGULAR;
39844018

0 commit comments

Comments
 (0)