6

私はNeo4Jが初めてで、おそらく簡単な質問があります。

私のアプリケーションには NodeEntitys があり、@Column(unique = true) を使用して JPA で行っているように、プロパティ (name) に @Indexed(unique = true) の注釈が付けられて一意性を実現しています。

私の問題は、グラフに既に存在する名前のエンティティを永続化すると、とにかく正常に動作することです。しかし、私はここである種の例外を期待していました...?! 基本的な私のコードの概要は次のとおりです。

@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);
}

それは私が何かがうまくいかないことを期待するポイントです!自分でチェックせずに、プロパティの一意性を確認するにはどうすればよいですか??

PS: 私は neo4j 1.8.M07、spring-data-neo4j 2.1.0.BUILD-SNAPSHOT および Spring 3.1.2.RELEASE を使用しています。

4

2 に答える 2

6

私は同じトラップに足を踏み入れました...新しいエンティティを作成する限り、例外は表示されません-最後のsave()アクションが戦いに勝ちます。

残念ながら、DataIntegrityViolationExceptionは、既存のエンティティを更新する場合にのみ発生します。

その動作の詳細な説明は、 http ://static.springsource.org/spring-data/data-graph/snapshot-site/reference/html/#d5e1035 にあります。

于 2012-11-07T22:56:56.857 に答える
5

SDN 3.2.0+ を使用している場合は、failOnDuplicate 属性を使用します。

public class Role extends BaseEntity
{
    @Indexed(unique = true, failOnDuplicate = true)
    private String name;
    ...
}
于 2014-12-25T15:12:27.940 に答える