HHH-15072 Add test for out of the box support for records as embeddables
This commit is contained in:
parent
75240b0cd3
commit
9f5f31ec97
|
@ -212,3 +212,50 @@ tasks.withType( Test.class ).each { test ->
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tests with records
|
||||||
|
if ( gradle.ext.javaVersions.test.release.asInt() >= 17 ) {
|
||||||
|
|
||||||
|
// Add a new source set, which contains tests that can run on JDK17+
|
||||||
|
sourceSets {
|
||||||
|
testJava17 {
|
||||||
|
java {
|
||||||
|
srcDirs = ['src/test/java17']
|
||||||
|
}
|
||||||
|
// Refer to the main test resources to avoid processing variables twice
|
||||||
|
resources {
|
||||||
|
srcDir 'target/resources/test'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// For the new source set, we need to configure the source and target version to 17
|
||||||
|
compileTestJava17Java {
|
||||||
|
sourceCompatibility = 17
|
||||||
|
targetCompatibility = 17
|
||||||
|
// We also depend on the main test resources
|
||||||
|
dependsOn( tasks.processTestResources )
|
||||||
|
}
|
||||||
|
|
||||||
|
// The source set gets a custom configuration which extends the normal test implementation config
|
||||||
|
configurations {
|
||||||
|
testJava17Implementation.extendsFrom(testImplementation, testRuntimeOnly)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the output from src/main/java as dependency
|
||||||
|
dependencies {
|
||||||
|
testJava17Implementation files(sourceSets.main.output.classesDirs) {
|
||||||
|
builtBy compileJava
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// We execute the Java 17 tests in a custom test task
|
||||||
|
task java17Test(type: Test) {
|
||||||
|
useJUnitPlatform()
|
||||||
|
testClassesDirs = sourceSets.testJava17.output.classesDirs
|
||||||
|
classpath = sourceSets.testJava17.runtimeClasspath
|
||||||
|
}
|
||||||
|
|
||||||
|
testClasses.dependsOn compileTestJava17Java
|
||||||
|
// And run this as part of the check task by default
|
||||||
|
check.dependsOn java17Test
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.records;
|
||||||
|
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import jakarta.persistence.Embeddable;
|
||||||
|
import jakarta.persistence.Embedded;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
|
||||||
|
@JiraKey( "HHH-15072" )
|
||||||
|
@DomainModel(annotatedClasses = { OutOfTheBoxRecordAsEmbeddableTest.MyEntity.class})
|
||||||
|
@SessionFactory
|
||||||
|
public class OutOfTheBoxRecordAsEmbeddableTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRecordPersistLoadAndMerge(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
session.persist( new MyEntity( 1L, new MyRecord( "test", "abc" ) ) );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
MyEntity myEntity = session.get( MyEntity.class, 1L );
|
||||||
|
assertNotNull( myEntity );
|
||||||
|
assertEquals( "test", myEntity.getRecord().name() );
|
||||||
|
assertEquals( "abc", myEntity.getRecord().description() );
|
||||||
|
|
||||||
|
myEntity.setRecord( new MyRecord( "test2", "def" ) );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "MyEntity")
|
||||||
|
public static class MyEntity {
|
||||||
|
@Id
|
||||||
|
Long id;
|
||||||
|
@Embedded
|
||||||
|
MyRecord record;
|
||||||
|
|
||||||
|
public MyEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public MyEntity(Long id, MyRecord record) {
|
||||||
|
this.id = id;
|
||||||
|
this.record = record;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MyRecord getRecord() {
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRecord(MyRecord record) {
|
||||||
|
this.record = record;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Embeddable
|
||||||
|
public static record MyRecord(String name, String description) {}
|
||||||
|
}
|
|
@ -220,7 +220,7 @@ gradle.ext.baselineJavaVersion = JavaLanguageVersion.of( 11 )
|
||||||
def GRADLE_MAX_SUPPORTED_BYTECODE_VERSION = 17
|
def GRADLE_MAX_SUPPORTED_BYTECODE_VERSION = 17
|
||||||
|
|
||||||
// If either 'main.jdk.version' or 'test.jdk.version' is set, enable the toolchain and use the selected jdk.
|
// If either 'main.jdk.version' or 'test.jdk.version' is set, enable the toolchain and use the selected jdk.
|
||||||
// If only one property is set, the other defaults to the baseline Java version (8).
|
// If only one property is set, the other defaults to the baseline Java version (11).
|
||||||
// Note that when toolchain is enabled, you also need to specify
|
// Note that when toolchain is enabled, you also need to specify
|
||||||
// the location of the selected jdks
|
// the location of the selected jdks
|
||||||
// (auto-download and auto-detect are disabled in gradle.properties).
|
// (auto-download and auto-detect are disabled in gradle.properties).
|
||||||
|
|
Loading…
Reference in New Issue