복붙노트

[SPRING] Spring 데이터 Neo4J @Indexed (unique = true)가 작동하지 않습니다.

SPRING

Spring 데이터 Neo4J @Indexed (unique = true)가 작동하지 않습니다.

저는 Neo4J를 처음 접했고 아마도 쉬운 질문이었을 것입니다.

내 응용 프로그램에서 거기 NodeEntitys는 속성 (이름) 내가 @Column (독특한 = TRUE)와 JPA에서처럼 고유성을 달성하기 위해 (독특한 = TRUE) @Indexed 주석된다.

내 문제는, 이미 내 그래프에 이미 존재하는 이름을 가진 엔티티를 지속하면 어쨌든 잘 작동한다는 것입니다. 그러나 나는 어떤 종류의 예외를 여기에서 기대했다. ...! 다음은 기본적인 코드에 대한 개요입니다.

@NodeEntity
public abstract class BaseEntity implements Identifiable
{
    @GraphId
    private Long entityId;
    ...
}

public class Role extends BaseEntity
{
    @Indexed(unique = true)
    private String name;
    ...
}

public interface RoleRepository extends GraphRepository<Role>
{
    Role findByName(String name);
}

@Service
public class RoleServiceImpl extends BaseEntityServiceImpl<Role> implements 
{
    private RoleRepository repository;

    @Override
    @Transactional
    public T save(final T entity) {
    return getRepository().save(entity);
    }
}

그리고 이것은 내 시험입니다.

@Test
public void testNameUniqueIndex() {
    final List<Role> roles = Lists.newLinkedList(service.findAll());
    final String existingName = roles.get(0).getName();
    Role newRole = new Role.Builder(existingName).build();
    newRole = service.save(newRole);
}

그것이 내가 잘못 될 것으로 예상되는 지점입니다! 나 혼자만 확인하지 않고 어떻게 부동산의 고유성을 보장 할 수 있습니까?

추신 : 저는 neo4j 1.8.M07, spring-data-neo4j 2.1.0.BUILD-SNAPSHOT 및 Spring 3.1.2.RELEASE를 사용하고 있습니다.

해결법

  1. ==============================

    1.나는 같은 함정에 들어갔다 ... 당신이 새로운 실체를 만들면 예외를 보지 못한다 - 마지막 save () - 행동이 전투에 이긴다.

    나는 같은 함정에 들어갔다 ... 당신이 새로운 실체를 만들면 예외를 보지 못한다 - 마지막 save () - 행동이 전투에 이긴다.

    불행히도 DataIntegrityViolationException은 기존 엔티티를 업데이트 할 때만 발생합니다!

    해당 동작에 대한 자세한 설명은 다음에서 찾을 수 있습니다. http://static.springsource.org/spring-data/data-graph/snapshot-site/reference/html/#d5e1035

  2. ==============================

    2.SDN 3.2.0 이상을 사용하는 경우 failOnDuplicate 속성을 사용하십시오.

    SDN 3.2.0 이상을 사용하는 경우 failOnDuplicate 속성을 사용하십시오.

    public class Role extends BaseEntity
    {
        @Indexed(unique = true, failOnDuplicate = true)
        private String name;
        ...
    }
    
  3. from https://stackoverflow.com/questions/12928251/spring-data-neo4j-indexedunique-true-not-working by cc-by-sa and MIT license