HHH-16009 Add test for issue
This commit is contained in:
parent
546d145d88
commit
ffd9c9b0f6
|
@ -0,0 +1,37 @@
|
|||
package org.hibernate.orm.test.annotations.onetomany.orderby;
|
||||
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.IdClass;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
|
||||
@Entity(name = "Department")
|
||||
@IdClass(DepartmentId.class)
|
||||
public class Department {
|
||||
|
||||
@Id
|
||||
@ManyToOne
|
||||
private ECompany company;
|
||||
|
||||
|
||||
@Id
|
||||
private String departmentCode;
|
||||
|
||||
private String name;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setCompany(ECompany company) {
|
||||
this.company = company;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void setDepartmentCode(String departmentId) {
|
||||
this.departmentCode = departmentId;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.hibernate.orm.test.annotations.onetomany.orderby;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class DepartmentId implements Serializable {
|
||||
|
||||
private ECompany company;
|
||||
private String departmentCode;
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package org.hibernate.orm.test.annotations.onetomany.orderby;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import jakarta.persistence.CascadeType;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.OneToMany;
|
||||
import jakarta.persistence.OrderBy;
|
||||
|
||||
@Entity(name = "Company")
|
||||
public class ECompany {
|
||||
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private Long id;
|
||||
|
||||
private String name;
|
||||
|
||||
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL)
|
||||
@OrderBy("departmentCode DESC")
|
||||
private Set<Department> departments;
|
||||
|
||||
public Set<Department> getDepartments() {
|
||||
return departments;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void setDepartments(Set<Department> departments) {
|
||||
this.departments = departments;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
package org.hibernate.orm.test.annotations.onetomany.orderby;
|
||||
|
||||
import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
|
||||
import org.hibernate.boot.model.naming.Identifier;
|
||||
import org.hibernate.boot.model.naming.ImplicitJoinTableNameSource;
|
||||
import org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl;
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
|
||||
import org.hibernate.testing.orm.junit.Jpa;
|
||||
import org.hibernate.testing.orm.junit.SettingProvider;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@Jpa(
|
||||
annotatedClasses = {
|
||||
ECompany.class,
|
||||
Department.class
|
||||
},
|
||||
settingProviders = {
|
||||
@SettingProvider(
|
||||
settingName = AvailableSettings.PHYSICAL_NAMING_STRATEGY,
|
||||
provider = IdClassAndOrderByTest.PhysicalNamingStrategyProvider.class
|
||||
),
|
||||
@SettingProvider(
|
||||
settingName = AvailableSettings.IMPLICIT_NAMING_STRATEGY,
|
||||
provider = IdClassAndOrderByTest.ImplicitNamingStrategyProvider.class
|
||||
),
|
||||
|
||||
}
|
||||
)
|
||||
@TestForIssue(jiraKey = "HHH-16009")
|
||||
public class IdClassAndOrderByTest {
|
||||
|
||||
public static final String COMPANY_NAME = "Foo Company";
|
||||
|
||||
public static class PhysicalNamingStrategyProvider implements SettingProvider.Provider<String> {
|
||||
@Override
|
||||
public String getSetting() {
|
||||
return CamelCaseToUnderscoresNamingStrategy.class.getName();
|
||||
}
|
||||
}
|
||||
|
||||
public static class ImplicitNamingStrategyProvider implements SettingProvider.Provider<String> {
|
||||
@Override
|
||||
public String getSetting() {
|
||||
return CustomImplicitNamingStrategy.class.getName();
|
||||
}
|
||||
}
|
||||
|
||||
@BeforeAll
|
||||
public void setUp(EntityManagerFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
entityManager -> {
|
||||
ECompany company = new ECompany();
|
||||
company.setName( COMPANY_NAME );
|
||||
entityManager.persist( company );
|
||||
|
||||
Department department = new Department();
|
||||
department.setCompany( company );
|
||||
department.setDepartmentCode( "1234567" );
|
||||
department.setName( "Foo Department" );
|
||||
entityManager.persist( department );
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelect(EntityManagerFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
entityManager -> {
|
||||
entityManager.createQuery(
|
||||
"SELECT c FROM Company c LEFT JOIN FETCH c.departments WHERE c.name = :name" )
|
||||
.setParameter( "name", COMPANY_NAME ).getResultList();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public static class CustomImplicitNamingStrategy extends ImplicitNamingStrategyJpaCompliantImpl {
|
||||
public CustomImplicitNamingStrategy() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Identifier determineJoinTableName(ImplicitJoinTableNameSource source) {
|
||||
String var10000 = source.getOwningPhysicalTableName();
|
||||
String name = var10000 + "_" + source.getAssociationOwningAttributePath().getProperty();
|
||||
return this.toIdentifier( name, source.getBuildingContext() );
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue