HHH-17965 Add test for issue
This commit is contained in:
parent
9601bffeda
commit
a3690b1e68
|
@ -0,0 +1,229 @@
|
|||
package org.hibernate.orm.test.annotations.collectionelement;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
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.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import jakarta.persistence.CollectionTable;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.ElementCollection;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
@DomainModel(
|
||||
annotatedClasses = {
|
||||
ElementCollectionReferencingIdColumnsTest.Company.class,
|
||||
ElementCollectionReferencingIdColumnsTest.Employee.class,
|
||||
ElementCollectionReferencingIdColumnsTest.Phone.class,
|
||||
}
|
||||
)
|
||||
@SessionFactory
|
||||
@JiraKey("HHH-17695")
|
||||
public class ElementCollectionReferencingIdColumnsTest {
|
||||
private static final Long COMPANY_ID = 1L;
|
||||
|
||||
private static final Long EMPLOYEE_ID = 3l;
|
||||
private static final String USER_ID = "4";
|
||||
private static final Long EMPLOYEE_ID_2 = 5l;
|
||||
private static final String USER_ID_2 = "6";
|
||||
|
||||
private static final Long PHONE_ID = 7l;
|
||||
private static final Long PHONE_ID_2 = 8l;
|
||||
|
||||
@BeforeAll
|
||||
public void setUp(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
|
||||
Phone phone = new Phone( PHONE_ID, "1234567", EMPLOYEE_ID );
|
||||
Phone phone2 = new Phone( PHONE_ID_2, "8910112", EMPLOYEE_ID_2 );
|
||||
|
||||
Employee employee = new Employee( EMPLOYEE_ID, USER_ID, "and", COMPANY_ID );
|
||||
Employee employee2 = new Employee( EMPLOYEE_ID_2, USER_ID_2, "and", COMPANY_ID );
|
||||
Company company = new Company( COMPANY_ID, "acme" );
|
||||
|
||||
session.persist( company );
|
||||
|
||||
session.persist( employee );
|
||||
session.persist( employee2 );
|
||||
|
||||
session.persist( phone );
|
||||
session.persist( phone2 );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelect(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
List<Company> companies = session.createQuery(
|
||||
"select c from Company c left join fetch c.employeeUserIds",
|
||||
Company.class
|
||||
)
|
||||
.getResultList();
|
||||
assertThat( companies.size() ).isEqualTo( 1 );
|
||||
Company company = companies.get( 0 );
|
||||
assertThat( company.getEmployeeUserIds().size() ).isEqualTo( 2 );
|
||||
assertTrue( company.getEmployeeUserIds().contains( USER_ID ) );
|
||||
assertTrue( company.getEmployeeUserIds().contains( USER_ID_2 ) );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Entity(name = "Company")
|
||||
@Table(name = "COMPANY")
|
||||
public static class Company {
|
||||
|
||||
@Id
|
||||
private Long id;
|
||||
|
||||
private String name;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "EMPLOYEE",
|
||||
joinColumns = @JoinColumn(name = "COMPANY_ID"))
|
||||
@Column(name = "USER_ID")
|
||||
private Set<String> employeeUserIds;
|
||||
|
||||
public Company() {
|
||||
}
|
||||
|
||||
public Company(Long id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Set<String> getEmployeeUserIds() {
|
||||
return employeeUserIds;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Entity(name = "Employee")
|
||||
@Table(name = "EMPLOYEE")
|
||||
public static class Employee {
|
||||
|
||||
@Id
|
||||
private Long id;
|
||||
|
||||
@Column(name = "USER_ID")
|
||||
private String userId;
|
||||
|
||||
private String name;
|
||||
|
||||
@Column(name = "COMPANY_ID")
|
||||
private Long companyId;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "PHONE",
|
||||
joinColumns = @JoinColumn(name = "EMPLOYEE_ID"))
|
||||
@Column(name = "PHONE_NUMBER")
|
||||
private List<String> phoneNumbers;
|
||||
|
||||
public Employee() {
|
||||
}
|
||||
|
||||
public Employee(Long id, String userId, String name, Long companyId) {
|
||||
this.id = id;
|
||||
this.userId = userId;
|
||||
this.name = name;
|
||||
this.companyId = companyId;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void setUserId(String userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Long getCompanyId() {
|
||||
return companyId;
|
||||
}
|
||||
|
||||
public void setCompanyId(Long companyId) {
|
||||
this.companyId = companyId;
|
||||
}
|
||||
|
||||
public List<String> getPhoneNumbers() {
|
||||
return phoneNumbers;
|
||||
}
|
||||
}
|
||||
|
||||
@Entity(name = "Phone")
|
||||
@Table(name = "PHONE")
|
||||
public static class Phone {
|
||||
|
||||
@Id
|
||||
private Long id;
|
||||
|
||||
@Column(name = "PHONE_NUMBER")
|
||||
private String phoneNumber;
|
||||
|
||||
@Column(name = "EMPLOYEE_ID")
|
||||
private Long employeeId;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public Phone() {
|
||||
}
|
||||
|
||||
public Phone(Long id, String phoneNumber, Long employeeId) {
|
||||
this.id = id;
|
||||
this.phoneNumber = phoneNumber;
|
||||
this.employeeId = employeeId;
|
||||
}
|
||||
|
||||
public Long getEmployeeId() {
|
||||
return employeeId;
|
||||
}
|
||||
|
||||
public void setEmployeeId(Long employeeId) {
|
||||
this.employeeId = employeeId;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue