hibernate/hibernate-orm · error · AnnotationException
Referenced column '{}' mapped by target property '{}' occurs
Error message
Referenced column '{}' mapped by target property '{}' occurs out of order in the list of '@JoinColumn's for association {} What it means
Error "Referenced column '{}' mapped by target property '{}' occurs out of order in the list of '@JoinColumn's for association {}" thrown in hibernate/hibernate-orm.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/boot/model/internal/BinderHelper.java:506
// that could be made to work for a different choice of
// properties (it's also not very deterministic)
final List<Property> orderedProperties = new ArrayList<>();
int lastPropertyColumnIndex = 0;
Property currentProperty = null;
for ( Column column : orderedColumns ) {
final Set<Property> properties = columnsToProperty.get( column );
if ( properties.isEmpty() ) {
// no property found which maps to this column
throw new AnnotationException( "Referenced column '" + column.getName()
+ "' in '@JoinColumn' for " + associationMessage( associatedEntity, columns )
+ " is not mapped by any property of the target entity" );
}
for ( Property property : properties ) {
if ( property == currentProperty ) {
// we have the next column of the previous property
if ( !property.getColumns().get( lastPropertyColumnIndex ).equals( column ) ) {
// the columns have to occur in the right order in the property
throw new AnnotationException( "Referenced column '" + column.getName()
+ "' mapped by target property '" + property.getName()
+ "' occurs out of order in the list of '@JoinColumn's for association "
+ associationMessage( associatedEntity, columns ) );
}
lastPropertyColumnIndex++;
if ( lastPropertyColumnIndex == currentProperty.getColumnSpan() ) {
//we have exhausted the columns in this property
currentProperty = null;
lastPropertyColumnIndex = 0;
}
}
else if ( currentProperty != null ) {
// we didn't use up all the columns of the previous property
throw new AnnotationException( "Target property '" + property.getName() + "' has "
+ property.getColumnSpan() + " columns which must be referenced by a '@JoinColumn' for "
+ associationMessage( associatedEntity, columns )
+ " (every column mapped by '" + property.getName()
+ "' must occur exactly once as a 'referencedColumnName', and in the correct order)" );View on GitHub (pinned to fad1729dce)
Solutions
- Reorder the @JoinColumn list so the referenced columns occur in the same order as the columns of the referenced target property.
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/626b3f7ace991f3f.
Report an issue: GitHub.