HHH-14340 - Add test
Signed-off-by: Jan Schatteman <jschatte@redhat.com>
This commit is contained in:
parent
445f95fb62
commit
244a6dcc00
|
@ -0,0 +1,284 @@
|
||||||
|
/*
|
||||||
|
* 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.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.FailureExpected;
|
||||||
|
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.CascadeType;
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
|
import jakarta.persistence.GeneratedValue;
|
||||||
|
import jakarta.persistence.GenerationType;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.IdClass;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.JoinColumns;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
|
import jakarta.persistence.OneToMany;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Jan Schatteman
|
||||||
|
*/
|
||||||
|
@DomainModel(
|
||||||
|
annotatedClasses = {
|
||||||
|
NestedIdClassTest.Asset.class, NestedIdClassTest.AssetAssetTypeAttribute.class, NestedIdClassTest.AssetTypeAttribute.class
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@SessionFactory
|
||||||
|
public class NestedIdClassTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@JiraKey("HHH-14340")
|
||||||
|
@FailureExpected(reason = "duplicate column in the generated SQL")
|
||||||
|
public void testIdClass(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
Asset asset = new Asset();
|
||||||
|
asset.setId(1L);
|
||||||
|
asset.setTenantId(2L);
|
||||||
|
AssetTypeAttribute assetTypeAttribute = new AssetTypeAttribute();
|
||||||
|
assetTypeAttribute.setId(3L);
|
||||||
|
assetTypeAttribute.setName("TestAttribute");
|
||||||
|
|
||||||
|
AssetAssetTypeAttribute assetAssetTypeAttribute = new AssetAssetTypeAttribute();
|
||||||
|
|
||||||
|
assetAssetTypeAttribute.setAssetTypeAttributeId(assetTypeAttribute.getId());
|
||||||
|
assetAssetTypeAttribute.setAsset(asset);
|
||||||
|
asset.setAssetAssetTypeAttributes(new HashSet<>());
|
||||||
|
asset.getAssetAssetTypeAttributes().add(assetAssetTypeAttribute);
|
||||||
|
|
||||||
|
session.persist(asset);
|
||||||
|
|
||||||
|
for (AssetAssetTypeAttribute assetAssetTypeAttribute1 : asset.getAssetAssetTypeAttributes()) {
|
||||||
|
session.persist(assetAssetTypeAttribute1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Asset")
|
||||||
|
@Table(name = "asset")
|
||||||
|
@IdClass(AssetId.class)
|
||||||
|
public static class Asset {
|
||||||
|
@Id
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "tenant_id")
|
||||||
|
private Long tenantId;
|
||||||
|
|
||||||
|
@OneToMany(fetch = FetchType.LAZY, mappedBy = "asset", cascade = CascadeType.ALL, orphanRemoval = true)
|
||||||
|
private Set<AssetAssetTypeAttribute> assetAssetTypeAttributes;
|
||||||
|
|
||||||
|
public void setTenantId(Long tenantId) {
|
||||||
|
this.tenantId = tenantId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getTenantId() {
|
||||||
|
return tenantId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<AssetAssetTypeAttribute> getAssetAssetTypeAttributes() {
|
||||||
|
return assetAssetTypeAttributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssetAssetTypeAttributes(Set<AssetAssetTypeAttribute> assetAssetTypeAttributes) {
|
||||||
|
this.assetAssetTypeAttributes = assetAssetTypeAttributes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "AssetAssetTypeAttribute")
|
||||||
|
@Table(name = "asset_asset_type_attribute")
|
||||||
|
@IdClass(AssetAttributeId.class)
|
||||||
|
public static class AssetAssetTypeAttribute {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "tenant_id", insertable = false, updatable = false)
|
||||||
|
private Long tenantId;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "asset_id", insertable = false, updatable = false)
|
||||||
|
private Long assetId;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "asset_type_attribute_id")
|
||||||
|
private Long assetTypeAttributeId;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumns({
|
||||||
|
@JoinColumn(name = "asset_id", referencedColumnName = "id"),
|
||||||
|
@JoinColumn(name = "tenant_id", referencedColumnName = "tenant_id"),
|
||||||
|
})
|
||||||
|
private Asset asset;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
|
||||||
|
@JoinColumn(name = "asset_type_attribute_id", referencedColumnName = "id", insertable = false, updatable = false)
|
||||||
|
private AssetTypeAttribute assetTypeAttribute;
|
||||||
|
|
||||||
|
private String sValue;
|
||||||
|
|
||||||
|
public Long getTenantId() {
|
||||||
|
return tenantId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTenantId(Long tenantId) {
|
||||||
|
this.tenantId = tenantId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getAssetId() {
|
||||||
|
return assetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssetId(Long assetId) {
|
||||||
|
this.assetId = assetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getAssetTypeAttributeId() {
|
||||||
|
return assetTypeAttributeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssetTypeAttributeId(Long assetTypeAttributeId) {
|
||||||
|
this.assetTypeAttributeId = assetTypeAttributeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Asset getAsset() {
|
||||||
|
return asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsset(Asset asset) {
|
||||||
|
this.asset = asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AssetTypeAttribute getAssetTypeAttribute() {
|
||||||
|
return assetTypeAttribute;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssetTypeAttribute(AssetTypeAttribute assetTypeAttribute) {
|
||||||
|
this.assetTypeAttribute = assetTypeAttribute;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getsValue() {
|
||||||
|
return sValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setsValue(String sValue) {
|
||||||
|
this.sValue = sValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Entity(name = "AssetTypeAttribute")
|
||||||
|
@Table(name = "asset_type_attribute")
|
||||||
|
public static class AssetTypeAttribute {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@OneToMany(fetch = FetchType.LAZY, mappedBy = "assetTypeAttribute", cascade = CascadeType.ALL, orphanRemoval = true)
|
||||||
|
private Set<AssetAssetTypeAttribute> assetAssetTypeAttributes;
|
||||||
|
|
||||||
|
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 static class AssetAttributeId implements Serializable {
|
||||||
|
private Long assetId;
|
||||||
|
private Long assetTypeAttributeId;
|
||||||
|
private Long tenantId;
|
||||||
|
|
||||||
|
public AssetAttributeId() {}
|
||||||
|
|
||||||
|
public AssetAttributeId(Long assetId, Long assetTypeAttributeId, Long tenantId) {
|
||||||
|
this.assetId = assetId;
|
||||||
|
this.assetTypeAttributeId = assetTypeAttributeId;
|
||||||
|
this.tenantId = tenantId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getAssetId() {
|
||||||
|
return assetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssetId(Long assetId) {
|
||||||
|
this.assetId = assetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getAssetTypeAttributeId() {
|
||||||
|
return assetTypeAttributeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssetTypeAttributeId(Long assetTypeAttributeId) {
|
||||||
|
this.assetTypeAttributeId = assetTypeAttributeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getTenantId() {
|
||||||
|
return tenantId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTenantId(Long tenantId) {
|
||||||
|
this.tenantId = tenantId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class AssetId implements Serializable {
|
||||||
|
private Long id;
|
||||||
|
private Long tenantId;
|
||||||
|
|
||||||
|
public AssetId() {}
|
||||||
|
|
||||||
|
public AssetId(Long id, Long tenantId) {
|
||||||
|
this.id = id;
|
||||||
|
this.tenantId = tenantId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getTenantId() {
|
||||||
|
return tenantId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTenantId(Long tenantId) {
|
||||||
|
this.tenantId = tenantId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue