Skip to content

Commit c8ef3d0

Browse files
committed
HHH-19480 add missing foreign key constraint to unidirectional @onetomany with referencedColumnName
1 parent 671f839 commit c8ef3d0

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

hibernate-core/src/main/java/org/hibernate/mapping/Collection.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -548,9 +548,16 @@ && isSame( element, other.element )
548548

549549
private void createForeignKeys() throws MappingException {
550550
// if ( !isInverse() ) { // for inverse collections, let the "other end" handle it
551+
final String entityName = getOwner().getEntityName();
551552
if ( referencedPropertyName == null ) {
552553
getElement().createForeignKey();
553-
key.createForeignKeyOfEntity( getOwner().getEntityName() );
554+
key.createForeignKeyOfEntity( entityName );
555+
}
556+
else {
557+
final Property property = owner.getProperty( referencedPropertyName );
558+
assert property != null;
559+
key.createForeignKeyOfEntity( entityName,
560+
property.getValue().getConstraintColumns() );
554561
}
555562
// }
556563
}

hibernate-core/src/main/java/org/hibernate/mapping/KeyValue.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.hibernate.dialect.Dialect;
99
import org.hibernate.generator.Generator;
1010

11+
import java.util.List;
12+
1113
/**
1214
* A mapping model {@link Value} which may be treated as an identifying key of a
1315
* relational database table. A {@code KeyValue} might represent the primary key
@@ -18,6 +20,8 @@
1820
*/
1921
public interface KeyValue extends Value {
2022

23+
ForeignKey createForeignKeyOfEntity(String entityName, List<Column> referencedColumns);
24+
2125
ForeignKey createForeignKeyOfEntity(String entityName);
2226

2327
boolean isCascadeDeleteEnabled();

hibernate-core/src/main/java/org/hibernate/mapping/SimpleValue.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,24 @@ public ForeignKey createForeignKeyOfEntity(String entityName) {
351351
return null;
352352
}
353353

354+
@Override
355+
public ForeignKey createForeignKeyOfEntity(String entityName, List<Column> referencedColumns) {
356+
if ( isConstrained() ) {
357+
final ForeignKey foreignKey = table.createForeignKey(
358+
getForeignKeyName(),
359+
getConstraintColumns(),
360+
entityName,
361+
getForeignKeyDefinition(),
362+
getForeignKeyOptions(),
363+
referencedColumns
364+
);
365+
foreignKey.setOnDeleteAction( onDeleteAction );
366+
return foreignKey;
367+
}
368+
369+
return null;
370+
}
371+
354372
@Override
355373
public void createUniqueKey(MetadataBuildingContext context) {
356374
if ( hasFormula() ) {

0 commit comments

Comments
 (0)