Example usage for org.hibernate.mapping PersistentClass getVersion

List of usage examples for org.hibernate.mapping PersistentClass getVersion

Introduction

In this page you can find the example usage for org.hibernate.mapping PersistentClass getVersion.

Prototype

public abstract Property getVersion();

Source Link

Usage

From source file:fr.keyconsulting.oliphant.postgresql.PostgreSQLListenerAuxiliary.java

License:Open Source License

public String sqlCreateString(Dialect dialect, Mapping mapping, String defaultCatalog, String defaultSchema) {
    StringBuilder sb = new StringBuilder();

    for (Iterator i = config.getClassMappings(); i.hasNext();) {
        PersistentClass c = (PersistentClass) i.next();
        Table table = c.getTable();/*from   ww  w .j  a  va2s  . c  om*/
        if (table.getPrimaryKey().getColumnSpan() > 1) {
            throw new HibernateException(
                    "Oliphant does not support primary keys that span multiple columns. Objects of class "
                            + c.getClassName() + " will not be monitored for changes.");
        }
        String tableName = table.getName().toLowerCase();

        String idColName = table.getPrimaryKey().getColumn(0).getName();

        Iterator verCols = c.getVersion().getColumnIterator();
        if (!verCols.hasNext()) {
            throw new HibernateException(
                    "Oliphant does not support version properties that span multiple columns. Objects of class "
                            + c.getClassName() + " will not be monitored for changes.");
        }
        Column verCol = (Column) verCols.next();
        String verColName = verCol.getName();
        if (verCols.hasNext()) {
            throw new HibernateException("Oliphant does not support non versioned entities. Objects of class "
                    + c.getClassName() + " will not be monitored for changes.");
        }
        sb.append("CREATE OR REPLACE FUNCTION oliphant_" + tableName + "() RETURNS TRIGGER AS $$\n");
        sb.append("   DECLARE\n");
        sb.append("      VERSION TEXT;\n");
        sb.append("   BEGIN\n");
        sb.append("      IF TG_OP = 'UPDATE' THEN\n");
        sb.append("         VERSION := NEW." + verColName + ";\n");
        sb.append("      ELSIF TG_OP = 'DELETE' THEN\n");
        sb.append("         VERSION := -1;\n");
        sb.append("      END IF;\n");
        sb.append("      PERFORM send_notify('oliphant', '" + tableName + "#' || encode(text(OLD." + idColName
                + ")::bytea,'base64') || '###' || encode(text(VERSION)::bytea,'base64')); RETURN NULL;\n");
        sb.append("   END;\n");
        sb.append("$$ LANGUAGE 'plpgsql';\n");
        sb.append("\n");
        sb.append("CREATE TRIGGER oliphant_" + tableName + "_trg\n");
        sb.append("   AFTER DELETE OR UPDATE ON " + tableName + "\n");
        sb.append("   FOR EACH ROW EXECUTE PROCEDURE oliphant_" + tableName + "();\n");
        sb.append("\n");
    }

    return sb.toString();
}

From source file:fr.keyconsulting.oliphant.postgresql.PostgreSQLListenerAuxiliary.java

License:Open Source License

public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) {
    StringBuilder sb = new StringBuilder();

    for (Iterator i = config.getClassMappings(); i.hasNext();) {
        PersistentClass c = (PersistentClass) i.next();
        Table table = c.getTable();/*from w  w w  . j a v  a 2 s . c  o m*/
        if ((table.getPrimaryKey().getColumnSpan() == 1) && (c.getVersion().getColumnSpan() == 1)) {
            String tableName = table.getName().toLowerCase();

            sb.append("DROP FUNCTION oliphant_" + tableName + "()\n");
            sb.append("\n");
        }
    }

    return sb.toString();
}

From source file:org.infinispan.test.hibernate.cache.commons.functional.AbstractFunctionalTest.java

License:LGPL

@Override
protected void afterMetadataBuilt(Metadata metadata) {
    if (addVersions) {
        for (PersistentClass clazz : metadata.getEntityBindings()) {
            if (clazz.getVersion() != null) {
                continue;
            }/*from  ww  w  .  j a v a2s  . c om*/
            try {
                clazz.getMappedClass().getMethod("getVersion");
                clazz.getMappedClass().getMethod("setVersion", long.class);
            } catch (NoSuchMethodException e) {
                continue;
            }
            RootClass rootClazz = clazz.getRootClass();
            Property versionProperty = new Property();
            versionProperty.setName("version");
            SimpleValue value = new SimpleValue((MetadataImplementor) metadata, rootClazz.getTable());
            value.setTypeName("long");
            Column column = new Column();
            column.setValue(value);
            column.setName("version");
            value.addColumn(column);
            rootClazz.getTable().addColumn(column);
            versionProperty.setValue(value);
            rootClazz.setVersion(versionProperty);
            rootClazz.addProperty(versionProperty);
        }
    }
}

From source file:org.wicketopia.persistence.hibernate.decorator.HibernatePropertyDecorator.java

License:Apache License

public void decorate(PropertyMetaData propertyMetaData) {
    WicketopiaPropertyFacet facet = WicketopiaPropertyFacet.get(propertyMetaData);
    final PersistentClass classMapping = findClassMapping(propertyMetaData.getBeanMetaData());
    if (classMapping != null) {
        final Property property = classMapping.getProperty(propertyMetaData.getPropertyDescriptor().getName());

        if (property == null) {
            return;
        } else if (!(property.getValue() instanceof SimpleValue)) {
            facet.setIgnored(true);/*from   w  ww.jav a  2 s .  c om*/
        } else if (ignoreIdentifiers && property.equals(classMapping.getIdentifierProperty())) {
            facet.setIgnored(true);
        } else if (property.equals(classMapping.getVersion())) {
            facet.setIgnored(true);
        }

        if (!property.isOptional()) {
            facet.setRequired(Context.ALL_CONTEXTS, true);
        }
    }
}