[SPRING] Spring 데이터 Neo4J @Indexed (unique = true)가 작동하지 않습니다.
SPRINGSpring 데이터 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.나는 같은 함정에 들어갔다 ... 당신이 새로운 실체를 만들면 예외를 보지 못한다 - 마지막 save () - 행동이 전투에 이긴다.
나는 같은 함정에 들어갔다 ... 당신이 새로운 실체를 만들면 예외를 보지 못한다 - 마지막 save () - 행동이 전투에 이긴다.
불행히도 DataIntegrityViolationException은 기존 엔티티를 업데이트 할 때만 발생합니다!
해당 동작에 대한 자세한 설명은 다음에서 찾을 수 있습니다. http://static.springsource.org/spring-data/data-graph/snapshot-site/reference/html/#d5e1035
-
==============================
2.SDN 3.2.0 이상을 사용하는 경우 failOnDuplicate 속성을 사용하십시오.
SDN 3.2.0 이상을 사용하는 경우 failOnDuplicate 속성을 사용하십시오.
public class Role extends BaseEntity { @Indexed(unique = true, failOnDuplicate = true) private String name; ... }
from https://stackoverflow.com/questions/12928251/spring-data-neo4j-indexedunique-true-not-working by cc-by-sa and MIT license