Search in sources :

Example 11 with MetaData

use of org.neo4j.ogm.metadata.MetaData in project neo4j-ogm by neo4j.

the class InvalidMetadataAutoIndexManagerTest method shouldCheckPropertiesExistsForCompositeIndex.

@Test(expected = MetadataException.class)
public void shouldCheckPropertiesExistsForCompositeIndex() {
    MetaData metadata = new MetaData(NoPropertyCompositeIndexEntity.class.getName());
    ClassInfo classInfo = metadata.classInfo(NoPropertyCompositeIndexEntity.class.getName());
    classInfo.getCompositeIndexes();
}
Also used : MetaData(org.neo4j.ogm.metadata.MetaData) NoPropertyCompositeIndexEntity(org.neo4j.ogm.domain.autoindex.NoPropertyCompositeIndexEntity) ClassInfo(org.neo4j.ogm.metadata.ClassInfo) Test(org.junit.Test)

Example 12 with MetaData

use of org.neo4j.ogm.metadata.MetaData in project neo4j-ogm by neo4j.

the class EntityUtils method setIdentity.

public static void setIdentity(Object entity, Long identity, MetaData metaData) {
    ClassInfo classInfo = metaData.classInfo(entity);
    if (classInfo.hasIdentityField()) {
        FieldInfo identityField = classInfo.identityField();
        identityField.write(entity, identity);
    } else if (identity == null) {
        // Reset any generated field if the new value is null in case the generated values is not an internal id.
        classInfo.fieldsInfo().fields().stream().filter(f -> f.getAnnotations().has(Id.class) && f.getAnnotations().has(GeneratedValue.class)).findFirst().ifPresent(generatedField -> generatedField.write(entity, null));
    }
}
Also used : AtomicLong(java.util.concurrent.atomic.AtomicLong) Id(org.neo4j.ogm.annotation.Id) MetaData(org.neo4j.ogm.metadata.MetaData) Collection(java.util.Collection) GeneratedValue(org.neo4j.ogm.annotation.GeneratedValue) ClassInfo(org.neo4j.ogm.metadata.ClassInfo) FieldInfo(org.neo4j.ogm.metadata.FieldInfo) ArrayList(java.util.ArrayList) GeneratedValue(org.neo4j.ogm.annotation.GeneratedValue) Id(org.neo4j.ogm.annotation.Id) FieldInfo(org.neo4j.ogm.metadata.FieldInfo) ClassInfo(org.neo4j.ogm.metadata.ClassInfo)

Example 13 with MetaData

use of org.neo4j.ogm.metadata.MetaData in project neo4j-ogm by neo4j.

the class DeleteDelegate method deleteOneOrMoreObjects.

// TODO : this is being done in multiple requests at the moment, one per object. Why not put them in a single request?
private void deleteOneOrMoreObjects(List<?> objects, Set<Object> neighbours) {
    Set<Object> notified = new HashSet<>();
    if (session.eventsEnabled()) {
        for (Object affectedObject : neighbours) {
            if (!notified.contains(affectedObject)) {
                session.notifyListeners(new PersistenceEvent(affectedObject, Event.TYPE.PRE_SAVE));
                notified.add(affectedObject);
            }
        }
    }
    for (Object object : objects) {
        MetaData metaData = session.metaData();
        ClassInfo classInfo = metaData.classInfo(object);
        if (classInfo == null) {
            session.warn(object.getClass().getName() + " is not an instance of a persistable class");
        } else {
            MappingContext mappingContext = session.context();
            Long id = mappingContext.optionalNativeId(object).filter(possibleId -> possibleId >= 0).orElseGet(() -> {
                session.warn(String.format("Instance of class %s has to be reloaded to be deleted. This can happen if the session has " + "been cleared between loading and deleting or using an object from a different transaction.", object.getClass()));
                return classInfo.getPrimaryIndexOrIdReader().apply(object).map(primaryIndexOrId -> session.load(object.getClass(), (Serializable) primaryIndexOrId)).flatMap(reloadedObject -> mappingContext.optionalNativeId(reloadedObject)).orElse(-1L);
            });
            if (id >= 0) {
                Statement request = getDeleteStatement(object, id, classInfo);
                if (session.eventsEnabled() && !notified.contains(object)) {
                    session.notifyListeners(new PersistenceEvent(object, Event.TYPE.PRE_DELETE));
                    notified.add(object);
                }
                RowModelRequest query = new DefaultRowModelRequest(request.getStatement(), request.getParameters());
                session.doInTransaction(() -> {
                    try (Response<RowModel> response = session.requestHandler().execute(query)) {
                        if (request.optimisticLockingConfig().isPresent()) {
                            List<RowModel> rowModels = response.toList();
                            session.optimisticLockingChecker().checkResultsCount(rowModels, request);
                        }
                        if (metaData.isRelationshipEntity(classInfo.name())) {
                            session.detachRelationshipEntity(id);
                        } else {
                            session.detachNodeEntity(id);
                        }
                        // enabled in the first place.
                        if (notified.contains(object)) {
                            session.notifyListeners(new PersistenceEvent(object, Event.TYPE.POST_DELETE));
                        }
                    }
                }, Transaction.Type.READ_WRITE);
            }
        }
    }
    if (session.eventsEnabled()) {
        for (Object affectedObject : neighbours) {
            if (notified.contains(affectedObject)) {
                session.notifyListeners(new PersistenceEvent(affectedObject, Event.TYPE.POST_SAVE));
            }
        }
    }
}
Also used : Arrays(java.util.Arrays) CypherQuery(org.neo4j.ogm.cypher.query.CypherQuery) Response(org.neo4j.ogm.response.Response) Neo4jSession(org.neo4j.ogm.session.Neo4jSession) MappingContext(org.neo4j.ogm.context.MappingContext) RowModelRequest(org.neo4j.ogm.request.RowModelRequest) RelationshipDeleteStatements(org.neo4j.ogm.session.request.strategy.impl.RelationshipDeleteStatements) ArrayList(java.util.ArrayList) DefaultRowModelRequest(org.neo4j.ogm.cypher.query.DefaultRowModelRequest) HashSet(java.util.HashSet) RowModel(org.neo4j.ogm.model.RowModel) Map(java.util.Map) Event(org.neo4j.ogm.session.event.Event) Transaction(org.neo4j.ogm.transaction.Transaction) PersistenceEvent(org.neo4j.ogm.session.event.PersistenceEvent) Result(org.neo4j.ogm.model.Result) DeleteStatements(org.neo4j.ogm.session.request.strategy.DeleteStatements) MetaData(org.neo4j.ogm.metadata.MetaData) Set(java.util.Set) NodeDeleteStatements(org.neo4j.ogm.session.request.strategy.impl.NodeDeleteStatements) Filter(org.neo4j.ogm.cypher.Filter) Statement(org.neo4j.ogm.request.Statement) Serializable(java.io.Serializable) List(java.util.List) ClassInfo(org.neo4j.ogm.metadata.ClassInfo) Collections(java.util.Collections) Serializable(java.io.Serializable) Statement(org.neo4j.ogm.request.Statement) RowModelRequest(org.neo4j.ogm.request.RowModelRequest) DefaultRowModelRequest(org.neo4j.ogm.cypher.query.DefaultRowModelRequest) MappingContext(org.neo4j.ogm.context.MappingContext) PersistenceEvent(org.neo4j.ogm.session.event.PersistenceEvent) MetaData(org.neo4j.ogm.metadata.MetaData) RowModel(org.neo4j.ogm.model.RowModel) HashSet(java.util.HashSet) ClassInfo(org.neo4j.ogm.metadata.ClassInfo) DefaultRowModelRequest(org.neo4j.ogm.cypher.query.DefaultRowModelRequest)

Example 14 with MetaData

use of org.neo4j.ogm.metadata.MetaData in project neo4j-ogm by neo4j.

the class LoadByInstancesDelegate method findCommonClassInfo.

/**
 * @param objects
 * @param <T>
 * @return A class info that is part of the hierarchy of the distinct object types contained in {@code objects}.
 */
private <T> ClassInfo findCommonClassInfo(Collection<T> objects) {
    MetaData metaData = session.metaData();
    Set<ClassInfo> infos = objects.stream().map(// 
    Object::getClass).distinct().map(// 
    metaData::classInfo).map(// 
    LoadByInstancesDelegate::getRootClassInfo).collect(toSet());
    if (infos.size() != 1) {
        throw new MappingException("Can't find single supertype for " + infos);
    }
    return infos.iterator().next();
}
Also used : MetaData(org.neo4j.ogm.metadata.MetaData) ClassInfo(org.neo4j.ogm.metadata.ClassInfo) MappingException(org.neo4j.ogm.exception.core.MappingException)

Example 15 with MetaData

use of org.neo4j.ogm.metadata.MetaData in project neo4j-ogm by neo4j.

the class UserTest method testDeserialiseUserWithArrayOfEnums.

@Test
public void testDeserialiseUserWithArrayOfEnums() {
    MetaData metadata = new MetaData("org.neo4j.ogm.domain.cineasts.annotated");
    Neo4jSession session = new Neo4jSession(metadata, true, new UsersRequest());
    User user = session.load(User.class, "luanne", 1);
    assertThat(user.getLogin()).isEqualTo("luanne");
    assertThat(user.getSecurityRoles()).isNotNull();
    assertThat(user.getSecurityRoles().length).isEqualTo(2);
}
Also used : User(org.neo4j.ogm.domain.cineasts.annotated.User) MetaData(org.neo4j.ogm.metadata.MetaData) Neo4jSession(org.neo4j.ogm.session.Neo4jSession) Test(org.junit.Test)

Aggregations

MetaData (org.neo4j.ogm.metadata.MetaData)21 Test (org.junit.Test)11 ClassInfo (org.neo4j.ogm.metadata.ClassInfo)6 MappingContext (org.neo4j.ogm.context.MappingContext)5 ArrayList (java.util.ArrayList)3 Before (org.junit.Before)3 BeforeClass (org.junit.BeforeClass)3 RealNode (org.neo4j.ogm.domain.gh619.model.RealNode)3 Neo4jSession (org.neo4j.ogm.session.Neo4jSession)3 Map (java.util.Map)2 ReflectionEntityInstantiator (org.neo4j.ogm.metadata.reflect.ReflectionEntityInstantiator)2 Serializable (java.io.Serializable)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Set (java.util.Set)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1