hibernate/hibernate-orm · error · AnnotationException
The '@JoinColumn's for association {} reference columns of d
Error message
The '@JoinColumn's for association {} reference columns of different tables mapped by the target entity '{}' ('{}' belongs to a different table to '{}' What it means
Error "The '@JoinColumn's for association {} reference columns of different tables mapped by the target entity '{}' ('{}' belongs to a different table to '{}'" thrown in hibernate/hibernate-orm.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/boot/model/internal/BinderHelper.java:206
PersistentClass associatedEntity,
MetadataBuildingContext context,
AttributeContainer columnOwner) {
if ( joinColumns.hasMappedBy() ) {
// we should only get called for owning side of association
throw new AssertionFailure("no need to create synthetic properties for unowned collections");
}
for ( var column: joinColumns.getJoinColumns() ) {
final var owner = findReferencedColumnOwner( targetEntity, column, context );
if ( owner == null ) {
throw new AnnotationException( "A '@JoinColumn' for association "
+ associationMessage( associatedEntity, joinColumns )
+ " references a column named '" + column.getReferencedColumn()
+ "' which is not mapped by the target entity '"
+ targetEntity.getEntityName() + "'" );
}
if ( owner != columnOwner) {
final var firstColumn = joinColumns.getJoinColumns().get(0);
throw new AnnotationException( "The '@JoinColumn's for association "
+ associationMessage( associatedEntity, joinColumns )
+ " reference columns of different tables mapped by the target entity '"
+ targetEntity.getEntityName() + "' ('" + column.getReferencedColumn() +
"' belongs to a different table to '" + firstColumn.getReferencedColumn() + "'" );
}
}
}
/**
* If the referenced columns correspond to exactly one property
* of the primary table of the exact target entity subclass,
* just use that property. Otherwise, if a composite key is
* spread out over multiple properties, then create a "synthetic"
* {@link Component} that aggregates these properties and is
* considered the target of the association. This method adds
* the property holding the synthetic component to the target
* entity {@link PersistentClass} by side effect.
* <p>View on GitHub (pinned to fad1729dce)
Solutions
- Make all @JoinColumn referencedColumnName values point to columns of the same table mapped by the target entity.
- If the target maps multiple tables, join only against columns of one table, or restructure the mapping.
When it happens
Trigger: A '@JoinColumn' / 'referencedColumnName' does not line up with the columns mapped by the target entity.
Common situations: Composite foreign keys, associations to entities with secondary tables, or reordered/duplicated referencedColumnName values across multiple @JoinColumn declarations.
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/a8910918054b181a.
Report an issue: GitHub.