Spring 3.1.2, Neo4J 1.8.RC1 및 SpringData 2.1.0.RC3으로 업그레이드 한 후 다음과 같은 문제가 발생합니다. 나는 아주 기본적인 테스트를 실행SpringData Neo4J - 리포지토리가 @GraphId를 변경하지 않습니까?
<!-- Neo4J -->
<neo4j:config storeDirectory="target/graph.db" entityManagerFactory="entityManagerFactory"/>
<neo4j:repositories base-package="***.repository"/>
<!-- H2 -->
<jdbc:embedded-database type="H2" id="accountDataSource">
<jdbc:script location="classpath:scripts/schema.sql" separator=";"/>
</jdbc:embedded-database>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="accountDataSource" />
<property name="packagesToScan" value="***.domain" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="showSql" value="false" />
<property name="databasePlatform" value="${database.dialect}" />
</bean>
</property>
</bean>
<!-- transactions -->
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven mode="aspectj" />
:
이 문제를 설명하기 전에, 여기에 내 응용 프로그램 컨텍스트의 일부입니다
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:devinlove-core.xml")
@Transactional
public class MascotRepositoryTest {
@Autowired
private MascotRepository mascotRepository;
private Mascot mascot;
@Before
public void setup() {
mascot = new Mascot();
mascot.setName("Tux");
}
@Test
public void when_inserting_then_retrievable() {
assertThat(mascotRepository).isNotNull();
mascotRepository.save(mascot);
assertThat(mascot.getId()).isGreaterThan(0L);
}
}
그리고 시험은 NPE와 함께 실패합니다. 저장 작업 후에 마스코트 ID가 여전히 null이 아닌 이유는 무엇입니까?
public interface MascotRepository extends GraphRepository<Mascot> {}
마스코트 자체가 매우 기본적인 NodeEntity입니다 : 다음과 같이
MascotRepository은 정의 중 하나
@NodeEntity
@TypeAlias("mascot")
public class Mascot {
@GraphId
private Long id;
@Indexed(indexType= FULLTEXT, indexName = "mascotSearch")
private String name;
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
@Override
public String toString() {
return "Mascot{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
이 문제와 관련 수 있을지는 모르겠지만, 내 NodeEntity는 부분적이므로 AspectJ (기본 ActiveRecord 메소드 추가 용)에 의해 수정된다. Neo4J 순수 엔티티가 아닌 부분적 NodeEntities 만 이렇게 수정 될 수 있습니까? 그렇지 않으면 저장소와 충돌을 일으킬 수 있습니까?
아이디어가 있으면 미리 감사드립니다. 롤프는
내가 어쩌면 거래에 문제가 있습니다. 로그의 "Outside of transaction, 필드 클래스에서 얻은 값 ..."을 많이 봅니다 ... – Rolf
NPE는 어디에서 발생합니까? 테스트를 위해 github 또는 dropbox에서 프로젝트를 공유 할 수 있습니까? Thx –
안녕하세요, 귀하의 성원에 감사드립니다. 여기 있습니다 : https://github.com/LateralThoughts/DevInLove/tree/meetup-unstable. 그냥 'mvn test'를 실행하여 문제를 재현하십시오. – Rolf