BAEL-1159 - Added sample with null fields (#3756)

* Squashed commit of the following:

commit b31955df9638a6217a804e61faa230d8eacb293b
Author: Juan Moreno <earth001@gmail.com>
Date:   Wed Feb 21 22:45:52 2018 -0300

    Sample code for BAEL-1159 - Working with Kotlin and JPA - earth001@gmail.com

* Squashed commit of the following:

commit 4e6e27c914a401ee6bc599c7ffe913384137646a
Author: Juan Moreno <earth001@gmail.com>
Date:   Wed Feb 21 23:26:20 2018 -0300

    Fix package names

commit b31955df9638a6217a804e61faa230d8eacb293b
Author: Juan Moreno <earth001@gmail.com>
Date:   Wed Feb 21 22:45:52 2018 -0300

    Sample code for BAEL-1159 - Working with Kotlin and JPA - earth001@gmail.com

* Added sample with null fields

* Removed unused dependency
This commit is contained in:
Juan Moreno 2018-03-08 08:31:06 -03:00 committed by Grzegorz Piwowarek
parent 4526bb6add
commit 67092ccc49
4 changed files with 44 additions and 8 deletions

View File

@ -20,7 +20,7 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hibernate.version>5.2.13.Final</hibernate.version> <hibernate.version>5.2.13.Final</hibernate.version>
<kotlin.version>1.2.21</kotlin.version> <kotlin.version>1.2.30</kotlin.version>
<spring.version>4.3.10.RELEASE</spring.version> <spring.version>4.3.10.RELEASE</spring.version>
<thymeleaf.version>3.0.7.RELEASE</thymeleaf.version> <thymeleaf.version>3.0.7.RELEASE</thymeleaf.version>
<h2.version>1.4.196</h2.version> <h2.version>1.4.196</h2.version>

View File

@ -1,15 +1,24 @@
package com.baeldung.jpa package com.baeldung.jpa
import javax.persistence.CascadeType
import javax.persistence.Column
import javax.persistence.Entity import javax.persistence.Entity
import javax.persistence.FetchType
import javax.persistence.GeneratedValue import javax.persistence.GeneratedValue
import javax.persistence.GenerationType import javax.persistence.GenerationType
import javax.persistence.Id import javax.persistence.Id
import javax.persistence.OneToMany
import javax.persistence.Table import javax.persistence.Table
@Entity @Entity
@Table(name = "person") @Table(name = "person")
data class Person( data class Person(
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Int, val id: Int,
val name: String) @Column(nullable = false)
val name: String,
@Column(nullable = true)
val email: String?,
@Column(nullable = true)
@OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.ALL]) val phoneNumbers: List<PhoneNumber>?)

View File

@ -0,0 +1,17 @@
package com.baeldung.jpa
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id
import javax.persistence.Table
@Entity
@Table(name = "phone_number")
data class PhoneNumber(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Int,
@Column(nullable = false)
val number: String)

View File

@ -1,6 +1,7 @@
package com.baeldung.kotlin.jpa package com.baeldung.kotlin.jpa
import com.baeldung.jpa.Person import com.baeldung.jpa.Person
import com.baeldung.jpa.PhoneNumber
import org.hibernate.cfg.Configuration import org.hibernate.cfg.Configuration
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase
import org.hibernate.testing.transaction.TransactionUtil.doInHibernate import org.hibernate.testing.transaction.TransactionUtil.doInHibernate
@ -21,7 +22,7 @@ class HibernateKotlinIntegrationTest : BaseCoreFunctionalTestCase() {
} }
override fun getAnnotatedClasses(): Array<Class<*>> { override fun getAnnotatedClasses(): Array<Class<*>> {
return arrayOf(Person::class.java) return arrayOf(Person::class.java, PhoneNumber::class.java)
} }
override fun configure(configuration: Configuration) { override fun configure(configuration: Configuration) {
@ -31,13 +32,22 @@ class HibernateKotlinIntegrationTest : BaseCoreFunctionalTestCase() {
@Test @Test
fun givenPerson_whenSaved_thenFound() { fun givenPerson_whenSaved_thenFound() {
val personToSave = Person(0, "John")
doInHibernate(({ this.sessionFactory() }), { session -> doInHibernate(({ this.sessionFactory() }), { session ->
val personToSave = Person(0, "John", "jhon@test.com", Arrays.asList(PhoneNumber(0, "202-555-0171"), PhoneNumber(0, "202-555-0102")))
session.persist(personToSave) session.persist(personToSave)
assertTrue(session.contains(personToSave))
})
doInHibernate(({ this.sessionFactory() }), { session ->
val personFound = session.find(Person::class.java, personToSave.id) val personFound = session.find(Person::class.java, personToSave.id)
session.refresh(personFound)
assertTrue(personToSave == personFound)
})
}
@Test
fun givenPersonWithNullFields_whenSaved_thenFound() {
doInHibernate(({ this.sessionFactory() }), { session ->
val personToSave = Person(0, "John", null, null)
session.persist(personToSave)
val personFound = session.find(Person::class.java, personToSave.id)
session.refresh(personFound)
assertTrue(personToSave == personFound) assertTrue(personToSave == personFound)
}) })
} }