Search in sources :

Example 1 with Column

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;
}
Also used : MapKeyJoinColumnDelegator(org.hibernate.cfg.annotations.MapKeyJoinColumnDelegator) MapKeyJoinColumns(jakarta.persistence.MapKeyJoinColumns) MapKeyColumn(jakarta.persistence.MapKeyColumn) MapKeyColumnDelegator(org.hibernate.cfg.annotations.MapKeyColumnDelegator) UniqueConstraint(jakarta.persistence.UniqueConstraint) Constraint(org.hibernate.mapping.Constraint) MapKeyJoinColumn(jakarta.persistence.MapKeyJoinColumn) JoinColumn(jakarta.persistence.JoinColumn) PrimaryKeyJoinColumn(jakarta.persistence.PrimaryKeyJoinColumn) MapKeyJoinColumn(jakarta.persistence.MapKeyJoinColumn) MapKeyColumn(jakarta.persistence.MapKeyColumn) MapKeyJoinColumn(jakarta.persistence.MapKeyJoinColumn) JoinColumn(jakarta.persistence.JoinColumn) Column(jakarta.persistence.Column) PrimaryKeyJoinColumn(jakarta.persistence.PrimaryKeyJoinColumn) OrderColumn(jakarta.persistence.OrderColumn) DiscriminatorColumn(jakarta.persistence.DiscriminatorColumn) AnnotatedDiscriminatorColumn.buildDiscriminatorColumn(org.hibernate.cfg.AnnotatedDiscriminatorColumn.buildDiscriminatorColumn) AnnotationException(org.hibernate.AnnotationException)

Example 2 with Column

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);
}
Also used : MapKeyColumn(jakarta.persistence.MapKeyColumn) MapKeyJoinColumn(jakarta.persistence.MapKeyJoinColumn) JoinColumn(jakarta.persistence.JoinColumn) Column(jakarta.persistence.Column) PrimaryKeyJoinColumn(jakarta.persistence.PrimaryKeyJoinColumn) OrderColumn(jakarta.persistence.OrderColumn) DiscriminatorColumn(jakarta.persistence.DiscriminatorColumn) AnnotatedDiscriminatorColumn.buildDiscriminatorColumn(org.hibernate.cfg.AnnotatedDiscriminatorColumn.buildDiscriminatorColumn) AnnotatedJoinColumn.buildJoinTableJoinColumns(org.hibernate.cfg.AnnotatedJoinColumn.buildJoinTableJoinColumns) JoinColumns(jakarta.persistence.JoinColumns) PrimaryKeyJoinColumns(jakarta.persistence.PrimaryKeyJoinColumns) Columns(org.hibernate.annotations.Columns) MapKeyJoinColumns(jakarta.persistence.MapKeyJoinColumns) AnnotationException(org.hibernate.AnnotationException) Join(org.hibernate.mapping.Join) ManyToOne(jakarta.persistence.ManyToOne) Cascade(org.hibernate.annotations.Cascade) NotFound(org.hibernate.annotations.NotFound) OnDelete(org.hibernate.annotations.OnDelete) JoinTable(jakarta.persistence.JoinTable)

Example 3 with Column

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;
}
Also used : AttributeOverrides(jakarta.persistence.AttributeOverrides) HashMap(java.util.HashMap) JoinColumn(jakarta.persistence.JoinColumn) Column(jakarta.persistence.Column) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map) AttributeOverride(jakarta.persistence.AttributeOverride)

Example 4 with Column

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;
    }
}
Also used : AnnotationDescriptor(org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor) JaxbPrimaryKeyJoinColumn(org.hibernate.boot.jaxb.mapping.spi.JaxbPrimaryKeyJoinColumn) JaxbMapKeyJoinColumn(org.hibernate.boot.jaxb.mapping.spi.JaxbMapKeyJoinColumn) PrimaryKeyJoinColumn(jakarta.persistence.PrimaryKeyJoinColumn) JaxbMapKeyColumn(org.hibernate.boot.jaxb.mapping.spi.JaxbMapKeyColumn) JaxbDiscriminatorColumn(org.hibernate.boot.jaxb.mapping.spi.JaxbDiscriminatorColumn) MapKeyColumn(jakarta.persistence.MapKeyColumn) JaxbColumn(org.hibernate.boot.jaxb.mapping.spi.JaxbColumn) MapKeyJoinColumn(jakarta.persistence.MapKeyJoinColumn) JoinColumn(jakarta.persistence.JoinColumn) OrderColumn(jakarta.persistence.OrderColumn) DiscriminatorColumn(jakarta.persistence.DiscriminatorColumn) JaxbOrderColumn(org.hibernate.boot.jaxb.mapping.spi.JaxbOrderColumn) Column(jakarta.persistence.Column) JaxbJoinColumn(org.hibernate.boot.jaxb.mapping.spi.JaxbJoinColumn) ArrayList(java.util.ArrayList)

Example 5 with Column

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());
}
Also used : MapKeyColumn(jakarta.persistence.MapKeyColumn) MapKeyJoinColumn(jakarta.persistence.MapKeyJoinColumn) JoinColumn(jakarta.persistence.JoinColumn) OrderColumn(jakarta.persistence.OrderColumn) Column(jakarta.persistence.Column) Test(org.junit.Test)

Aggregations

Column (jakarta.persistence.Column)13 JoinColumn (jakarta.persistence.JoinColumn)12 MapKeyColumn (jakarta.persistence.MapKeyColumn)11 MapKeyJoinColumn (jakarta.persistence.MapKeyJoinColumn)11 OrderColumn (jakarta.persistence.OrderColumn)11 DiscriminatorColumn (jakarta.persistence.DiscriminatorColumn)9 PrimaryKeyJoinColumn (jakarta.persistence.PrimaryKeyJoinColumn)9 AnnotatedDiscriminatorColumn.buildDiscriminatorColumn (org.hibernate.cfg.AnnotatedDiscriminatorColumn.buildDiscriminatorColumn)6 MapKeyJoinColumns (jakarta.persistence.MapKeyJoinColumns)5 JoinColumns (jakarta.persistence.JoinColumns)4 PrimaryKeyJoinColumns (jakarta.persistence.PrimaryKeyJoinColumns)4 AnnotationException (org.hibernate.AnnotationException)4 AnnotatedJoinColumn.buildJoinTableJoinColumns (org.hibernate.cfg.AnnotatedJoinColumn.buildJoinTableJoinColumns)4 Id (jakarta.persistence.Id)3 ArrayList (java.util.ArrayList)3 AnnotationDescriptor (org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor)3 XProperty (org.hibernate.annotations.common.reflection.XProperty)3 JaxbColumn (org.hibernate.boot.jaxb.mapping.spi.JaxbColumn)3 JaxbDiscriminatorColumn (org.hibernate.boot.jaxb.mapping.spi.JaxbDiscriminatorColumn)3 JaxbJoinColumn (org.hibernate.boot.jaxb.mapping.spi.JaxbJoinColumn)3