hibernate/hibernate-orm · error · IllegalStateException
no unique value
Error message
no unique value
What it means
MetaAttribute#getValue throws IllegalStateException when the attribute holds zero or more than one value - only a single-valued meta attribute has a unique value. Meta attributes come from hbm <meta value="..."> elements and may legitimately repeat, so asking for 'the' value is only valid when exactly one exists.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/mapping/MetaAttribute.java:38
public MetaAttribute(String name) {
this.name = name;
}
public String getName() {
return name;
}
public java.util.List<String> getValues() {
return Collections.unmodifiableList(values);
}
public void addValue(String value) {
values.add(value);
}
public String getValue() {
if ( values.size()!=1 ) {
throw new IllegalStateException("no unique value");
}
return values.get(0);
}
public boolean isMultiValued() {
return values.size()>1;
}
public String toString() {
return "[" + name + "=" + values + "]";
}
}
View on GitHub (pinned to fad1729dce)
Solutions
- Call isMultiValued() or check getValues().size() before getValue(), or just use getValues() when multiple values are legal.
- Deduplicate the <meta> elements in the hbm file so the attribute is single-valued.
- Update tooling that assumes uniqueness to handle the value list.
Example fix
// before
String v = metaAttribute.getValue(); // throws when 0 or 2+ values
// after
if (metaAttribute.getValues().size() == 1) {
String v = metaAttribute.getValue();
} else {
List<String> all = metaAttribute.getValues();
} Defensive patterns
Strategy: type-guard
Type guard
static Optional<String> uniqueValue(MetaAttribute attr) {
return attr.getValues().size() == 1
? Optional.of(attr.getValue())
: Optional.empty();
} Prevention
- Prefer getValues() over getValue() unless the mapping schema guarantees exactly one value.
- Validate hbm files for duplicate <meta> elements with the same attribute name.
- When merging inherited meta attributes, concatenate values instead of assuming uniqueness.
When it happens
Trigger: The same <meta attribute="..."> declared multiple times in one mapping element; inheritable meta attributes duplicated across mapping levels; tooling (hbm2java, reverse engineering) reading a single value from a multi-valued attribute; calling getValue() without checking the value count.
Common situations: Hand-edited hbm files where meta tags were duplicated by copy-paste; templates emitting the same meta attribute more than once; merging mappings that each carry the same meta attribute.
Related errors
- Encountered unexpected content type [%s] for named native qu
- <many-to-any /> mapping [%s] needs to specify 2 or more colu
- <many-to-any /> mapping [%s] needs to specify 2 or more colu
- Expecting just a single formula/column in context of <%s nam
- Expecting single column in context of <%s name="%s"/>, but f
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/b36d37ae07d85dfe.
Report an issue: GitHub.