use of jakarta.persistence.Column in project hibernate-orm by hibernate.
the class AnnotationBinder method mapKeyColumns.
private static JoinColumn[] mapKeyColumns(PropertyHolder propertyHolder, PropertyData inferredData, EntityBinder entityBinder, MetadataBuildingContext context, XProperty property, CollectionBinder collectionBinder, Comment comment) {
Column[] keyColumns = property.isAnnotationPresent(MapKeyColumn.class) ? new Column[] { new MapKeyColumnDelegator(property.getAnnotation(MapKeyColumn.class)) } : null;
AnnotatedColumn[] mapColumns = buildColumnsFromAnnotations(keyColumns, comment, Nullability.FORCED_NOT_NULL, propertyHolder, inferredData, "_KEY", entityBinder.getSecondaryTables(), context);
collectionBinder.setMapKeyColumns(mapColumns);
JoinColumn[] joinKeyColumns = null;
if (property.isAnnotationPresent(MapKeyJoinColumns.class)) {
final MapKeyJoinColumn[] mapKeyJoinColumns = property.getAnnotation(MapKeyJoinColumns.class).value();
joinKeyColumns = new JoinColumn[mapKeyJoinColumns.length];
int index = 0;
for (MapKeyJoinColumn joinColumn : mapKeyJoinColumns) {
joinKeyColumns[index] = new MapKeyJoinColumnDelegator(joinColumn);
index++;
}
if (property.isAnnotationPresent(MapKeyJoinColumn.class)) {
throw new AnnotationException("@MapKeyJoinColumn and @MapKeyJoinColumns used on the same property: " + BinderHelper.getPath(propertyHolder, inferredData));
}
} else if (property.isAnnotationPresent(MapKeyJoinColumn.class)) {
joinKeyColumns = new JoinColumn[] { new MapKeyJoinColumnDelegator(property.getAnnotation(MapKeyJoinColumn.class)) };
}
return joinKeyColumns;
}
use of jakarta.persistence.Column in project hibernate-orm by hibernate.
the class AnnotationBinder method bindManyToOne.
private static void bindManyToOne(PropertyHolder propertyHolder, PropertyData inferredData, boolean isIdentifierMapper, boolean inSecondPass, MetadataBuildingContext context, XProperty property, AnnotatedJoinColumn[] joinColumns, PropertyBinder propertyBinder, boolean forcePersist) {
ManyToOne ann = property.getAnnotation(ManyToOne.class);
// check validity
if (property.isAnnotationPresent(Column.class) || property.isAnnotationPresent(Columns.class)) {
throw new AnnotationException("@Column(s) not allowed on a @ManyToOne property: " + BinderHelper.getPath(propertyHolder, inferredData));
}
Cascade hibernateCascade = property.getAnnotation(Cascade.class);
NotFound notFound = property.getAnnotation(NotFound.class);
boolean ignoreNotFound = notFound != null && notFound.action() == NotFoundAction.IGNORE;
matchIgnoreNotFoundWithFetchType(propertyHolder.getEntityName(), property.getName(), ignoreNotFound, ann.fetch());
OnDelete onDeleteAnn = property.getAnnotation(OnDelete.class);
JoinTable assocTable = propertyHolder.getJoinTable(property);
if (assocTable != null) {
Join join = propertyHolder.addJoin(assocTable, false);
for (AnnotatedJoinColumn joinColumn : joinColumns) {
joinColumn.setExplicitTableName(join.getTable().getName());
}
}
// MapsId means the columns belong to the pk;
// A @MapsId association (obviously) must be non-null when the entity is first persisted.
// If a @MapsId association is not mapped with @NotFound(IGNORE), then the association
// is mandatory (even if the association has optional=true).
// If a @MapsId association has optional=true and is mapped with @NotFound(IGNORE) then
// the association is optional.
final boolean mandatory = !ann.optional() || property.isAnnotationPresent(Id.class) || property.isAnnotationPresent(MapsId.class) && !ignoreNotFound;
bindManyToOne(getCascadeStrategy(ann.cascade(), hibernateCascade, false, forcePersist), joinColumns, !mandatory, ignoreNotFound, onDeleteAnn != null && OnDeleteAction.CASCADE == onDeleteAnn.action(), ToOneBinder.getTargetEntity(inferredData, context), propertyHolder, inferredData, false, isIdentifierMapper, inSecondPass, propertyBinder, context);
}
use of jakarta.persistence.Column in project hibernate-orm by hibernate.
the class AbstractPropertyHolder method buildColumnOverride.
private static Map<String, Column[]> buildColumnOverride(XAnnotatedElement element, String path) {
Map<String, Column[]> columnOverride = new HashMap<>();
if (element != null) {
AttributeOverride singleOverride = element.getAnnotation(AttributeOverride.class);
AttributeOverrides multipleOverrides = element.getAnnotation(AttributeOverrides.class);
AttributeOverride[] overrides;
if (singleOverride != null) {
overrides = new AttributeOverride[] { singleOverride };
} else if (multipleOverrides != null) {
overrides = multipleOverrides.value();
} else {
overrides = null;
}
if (overrides != null) {
Map<String, List<Column>> columnOverrideList = new HashMap<>();
for (AttributeOverride depAttr : overrides) {
String qualifiedName = StringHelper.qualify(path, depAttr.name());
if (columnOverrideList.containsKey(qualifiedName)) {
columnOverrideList.get(qualifiedName).add(depAttr.column());
} else {
columnOverrideList.put(qualifiedName, new ArrayList<>(Arrays.asList(depAttr.column())));
}
}
for (Map.Entry<String, List<Column>> entry : columnOverrideList.entrySet()) {
columnOverride.put(entry.getKey(), entry.getValue().toArray(new Column[entry.getValue().size()]));
}
}
}
return columnOverride;
}
use of jakarta.persistence.Column in project hibernate-orm by hibernate.
the class JPAXMLOverriddenAnnotationReader method buildColumns.
private Columns buildColumns(JaxbColumn element, String nodeName) {
if (element == null) {
return null;
}
List<Column> columns = new ArrayList<>(1);
columns.add(getColumn(element, false, nodeName));
if (columns.size() > 0) {
AnnotationDescriptor columnsDescr = new AnnotationDescriptor(Columns.class);
columnsDescr.setValue("columns", columns.toArray(new Column[columns.size()]));
return AnnotationFactory.create(columnsDescr);
} else {
return null;
}
}
use of jakarta.persistence.Column in project hibernate-orm by hibernate.
the class Ejb3XmlElementCollectionTest method testColumnAllAttributes.
@Test
public void testColumnAllAttributes() throws Exception {
reader = getReader(Entity3.class, "field1", "element-collection.orm17.xml");
assertAnnotationPresent(ElementCollection.class);
assertAnnotationPresent(Column.class);
Column column = reader.getAnnotation(Column.class);
assertEquals("col1", column.name());
assertTrue(column.unique());
assertFalse(column.nullable());
assertFalse(column.insertable());
assertFalse(column.updatable());
assertEquals("int", column.columnDefinition());
assertEquals("table1", column.table());
assertEquals(50, column.length());
assertEquals(2, column.precision());
assertEquals(1, column.scale());
}
Aggregations