Skip to content

Commit 3da0ee1

Browse files
committed
reproducer for invalid sql query
1 parent e0f889d commit 3da0ee1

File tree

5 files changed

+141
-0
lines changed

5 files changed

+141
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.multitenancy.discriminator;
6+
7+
import org.hibernate.bugs.entity.MultitenantChildEntity;
8+
import org.hibernate.bugs.entity.MultitenantParentEntity;
9+
import org.hibernate.bugs.entity.MultitenantReferenceEntity;
10+
import org.hibernate.cfg.AvailableSettings;
11+
import org.hibernate.testing.orm.junit.DomainModel;
12+
import org.hibernate.testing.orm.junit.ServiceRegistry;
13+
import org.hibernate.testing.orm.junit.SessionFactory;
14+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
15+
import org.hibernate.testing.orm.junit.Setting;
16+
import org.junit.jupiter.api.Test;
17+
18+
import java.util.List;
19+
20+
21+
@DomainModel(
22+
annotatedClasses = {
23+
MultitenantChildEntity.class,
24+
MultitenantParentEntity.class,
25+
MultitenantReferenceEntity.class
26+
}
27+
)
28+
@ServiceRegistry(
29+
settings = {
30+
@Setting(name = AvailableSettings.SHOW_SQL, value = "true"),
31+
@Setting(name = AvailableSettings.FORMAT_SQL, value = "true"),
32+
@Setting(name = AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER,
33+
value = "org.hibernate.orm.test.multitenancy.discriminator.resolver.TenantResolver"),
34+
}
35+
)
36+
@SessionFactory
37+
class MultitenancyJoinedStrategyQueryTest {
38+
39+
@Test
40+
void hhh123Test(SessionFactoryScope scope) {
41+
scope.inTransaction( session -> {
42+
List<MultitenantReferenceEntity> results = session.createSelectionQuery(
43+
"from MultitenantReferenceEntity r where r.child.number = :number",
44+
MultitenantReferenceEntity.class )
45+
.setParameter( "number", 7 )
46+
.getResultList();
47+
// no exception is thrown
48+
} );
49+
}
50+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.multitenancy.discriminator.resolver;
6+
7+
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
8+
9+
public class TenantResolver implements CurrentTenantIdentifierResolver<Long> {
10+
@Override
11+
public Long resolveCurrentTenantIdentifier() {
12+
return 1L;
13+
}
14+
15+
@Override
16+
public boolean validateExistingCurrentSessions() {
17+
return false;
18+
}
19+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.bugs.entity;
6+
7+
8+
import jakarta.persistence.DiscriminatorValue;
9+
import jakarta.persistence.Entity;
10+
import jakarta.persistence.FetchType;
11+
import jakarta.persistence.OneToMany;
12+
13+
import java.util.List;
14+
15+
@Entity
16+
@DiscriminatorValue("CHILD")
17+
public class MultitenantChildEntity extends MultitenantParentEntity {
18+
Long number;
19+
20+
@OneToMany(mappedBy = "child", fetch = FetchType.LAZY, orphanRemoval = true)
21+
List<MultitenantReferenceEntity> references;
22+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.bugs.entity;
6+
7+
8+
import jakarta.persistence.DiscriminatorColumn;
9+
import jakarta.persistence.DiscriminatorType;
10+
import jakarta.persistence.Entity;
11+
import jakarta.persistence.GeneratedValue;
12+
import jakarta.persistence.Id;
13+
import jakarta.persistence.Inheritance;
14+
import jakarta.persistence.InheritanceType;
15+
import org.hibernate.annotations.TenantId;
16+
17+
@Entity
18+
@Inheritance(strategy = InheritanceType.JOINED)
19+
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "entity_type")
20+
public class MultitenantParentEntity {
21+
@Id
22+
@GeneratedValue
23+
Long id;
24+
25+
@TenantId
26+
Long tenantId;
27+
28+
String entityType;
29+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.bugs.entity;
6+
7+
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.GeneratedValue;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.ManyToOne;
12+
13+
@Entity
14+
public class MultitenantReferenceEntity {
15+
@Id
16+
@GeneratedValue
17+
Long id;
18+
19+
@ManyToOne()
20+
MultitenantChildEntity child;
21+
}

0 commit comments

Comments
 (0)