Skip to content

Commit 1372069

Browse files
Carlos LópezCarlos López
authored andcommitted
HHH-12997 Added test to track faliure
1 parent 60abc8a commit 1372069

File tree

2 files changed

+153
-1
lines changed

2 files changed

+153
-1
lines changed

hibernate-core/src/main/java/org/hibernate/cfg/annotations/TableBinder.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.hibernate.mapping.Collection;
3636
import org.hibernate.mapping.Column;
3737
import org.hibernate.mapping.DependantValue;
38+
import org.hibernate.mapping.Formula;
3839
import org.hibernate.mapping.JoinedSubclass;
3940
import org.hibernate.mapping.PersistentClass;
4041
import org.hibernate.mapping.Property;
@@ -570,7 +571,11 @@ public static void bindFk(
570571
mappedByColumns = property.getValue().getColumnIterator();
571572
}
572573
while ( mappedByColumns.hasNext() ) {
573-
Column column = (Column) mappedByColumns.next();
574+
Object o = mappedByColumns.next();
575+
if(o instanceof Formula) {
576+
throw new AnnotationException("Formula is not supported along with this type of relationship");
577+
}
578+
Column column = (Column) o;
574579
columns[0].overrideFromReferencedColumnIfNecessary( column );
575580
columns[0].linkValueUsingAColumnCopy( column, value );
576581
}
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package org.hibernate.test.annotations.formula;
2+
3+
import org.hibernate.annotations.JoinFormula;
4+
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
5+
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;
6+
import org.hibernate.testing.FailureExpected;
7+
import org.hibernate.testing.TestForIssue;
8+
import org.hibernate.testing.junit4.BaseUnitTestCase;
9+
import org.junit.Test;
10+
11+
import javax.persistence.Entity;
12+
import javax.persistence.GeneratedValue;
13+
import javax.persistence.GenerationType;
14+
import javax.persistence.Id;
15+
import javax.persistence.ManyToOne;
16+
import javax.persistence.OneToMany;
17+
import javax.persistence.SharedCacheMode;
18+
import javax.persistence.Table;
19+
import javax.persistence.ValidationMode;
20+
import javax.persistence.spi.ClassTransformer;
21+
import javax.persistence.spi.PersistenceUnitInfo;
22+
import javax.persistence.spi.PersistenceUnitTransactionType;
23+
import javax.sql.DataSource;
24+
import java.net.URL;
25+
import java.util.Arrays;
26+
import java.util.Collections;
27+
import java.util.List;
28+
import java.util.Properties;
29+
import java.util.Set;
30+
31+
public class JoinFormulaWithOneToMany extends BaseUnitTestCase {
32+
33+
@Test
34+
@TestForIssue(jiraKey = "HHH-12997")
35+
@FailureExpected(jiraKey = "HHH-12997")
36+
public void testJoinFormulaWithOneToMany() {
37+
38+
PersistenceUnitInfo info = new PersistenceUnitInfo() {
39+
@Override
40+
public String getPersistenceUnitName() {
41+
return "test";
42+
}
43+
44+
@Override
45+
public String getPersistenceProviderClassName() {
46+
return null;
47+
}
48+
49+
@Override
50+
public PersistenceUnitTransactionType getTransactionType() {
51+
return null;
52+
}
53+
54+
@Override
55+
public DataSource getJtaDataSource() {
56+
return null;
57+
}
58+
59+
@Override
60+
public DataSource getNonJtaDataSource() {
61+
return null;
62+
}
63+
64+
@Override
65+
public List<String> getMappingFileNames() {
66+
return null;
67+
}
68+
69+
@Override
70+
public List<URL> getJarFileUrls() {
71+
return null;
72+
}
73+
74+
@Override
75+
public URL getPersistenceUnitRootUrl() {
76+
return null;
77+
}
78+
79+
@Override
80+
public List<String> getManagedClassNames() {
81+
return Arrays.asList(Parent.class.getName(), Child.class.getName());
82+
}
83+
84+
@Override
85+
public boolean excludeUnlistedClasses() {
86+
return false;
87+
}
88+
89+
@Override
90+
public SharedCacheMode getSharedCacheMode() {
91+
return null;
92+
}
93+
94+
@Override
95+
public ValidationMode getValidationMode() {
96+
return null;
97+
}
98+
99+
@Override
100+
public Properties getProperties() {
101+
return new Properties();
102+
}
103+
104+
@Override
105+
public String getPersistenceXMLSchemaVersion() {
106+
return null;
107+
}
108+
109+
@Override
110+
public ClassLoader getClassLoader() {
111+
return null;
112+
}
113+
114+
@Override
115+
public void addTransformer(ClassTransformer transformer) {
116+
117+
}
118+
119+
@Override
120+
public ClassLoader getNewTempClassLoader() {
121+
return null;
122+
}
123+
124+
};
125+
126+
new EntityManagerFactoryBuilderImpl(new PersistenceUnitInfoDescriptor(info),
127+
Collections.singletonMap("hibernate.dialect", "org.hibernate.dialect.H2Dialect")).build();
128+
129+
}
130+
131+
@Entity @Table(name = "child") class Child {
132+
133+
@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
134+
135+
@ManyToOne() @JoinFormula(value = "(SELECT * FROM child)") private Parent parent;
136+
137+
}
138+
139+
@Entity @Table(name = "parent") class Parent {
140+
141+
@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
142+
143+
@OneToMany(mappedBy = "parent") private Set<Child> childs;
144+
145+
}
146+
147+
}

0 commit comments

Comments
 (0)