HHH-16054 add test showing issue fixed
This commit is contained in:
parent
297db578cc
commit
6be5d52eb8
|
@ -0,0 +1,148 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
* Copyright Red Hat Inc. and Hibernate Authors
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.idclass;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Objects;
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||||
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.hamcrest.core.Is.is;
|
||||||
|
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Aber Tian
|
||||||
|
*/
|
||||||
|
@JiraKey("HHH-16054")
|
||||||
|
public class JoinedSubclassWithIdClassTest extends BaseCoreFunctionalTestCase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class[] {
|
||||||
|
BaseEntity.class,
|
||||||
|
ConcreteEntity.class
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testJoinedSubClassWithIdClassComposeKey() {
|
||||||
|
|
||||||
|
ConcreteEntity entity = new ConcreteEntity();
|
||||||
|
entity.setId( 1L );
|
||||||
|
entity.setDealer( "dealer" );
|
||||||
|
entity.setName( "aber" );
|
||||||
|
entity.setAge( 18 );
|
||||||
|
|
||||||
|
Pk pk = new Pk();
|
||||||
|
pk.id = 1L;
|
||||||
|
pk.dealer = "dealer";
|
||||||
|
|
||||||
|
doInHibernate( this::sessionFactory, session -> {
|
||||||
|
session.merge( entity );
|
||||||
|
} );
|
||||||
|
|
||||||
|
doInHibernate( this::sessionFactory, session -> {
|
||||||
|
entity.setName( "tian" );
|
||||||
|
session.merge( entity );
|
||||||
|
BaseEntity baseEntity = session.find( BaseEntity.class, pk );
|
||||||
|
assertThat( baseEntity.name, is( "tian" ) );
|
||||||
|
} );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Pk implements Serializable {
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
private String dealer;
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDealer() {
|
||||||
|
return dealer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDealer(String dealer) {
|
||||||
|
this.dealer = dealer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if ( this == o ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ( o == null || getClass() != o.getClass() ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Pk pk = (Pk) o;
|
||||||
|
return id == pk.id && Objects.equals( dealer, pk.dealer );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash( id, dealer );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "BaseEntity")
|
||||||
|
@Inheritance(strategy = InheritanceType.JOINED)
|
||||||
|
@IdClass(Pk.class)
|
||||||
|
public static abstract class BaseEntity {
|
||||||
|
@Id
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
private String dealer;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDealer() {
|
||||||
|
return dealer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDealer(String dealer) {
|
||||||
|
this.dealer = dealer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "ConcreteEntity")
|
||||||
|
public static class ConcreteEntity extends BaseEntity {
|
||||||
|
|
||||||
|
private int age;
|
||||||
|
|
||||||
|
public int getAge() {
|
||||||
|
return age;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAge(int age) {
|
||||||
|
this.age = age;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue