neo4jデータベースに問題があります。データを初期化しようとすると、1つのサンプルデータを作成するだけで、データを初期化しようとすると、2つのサンプルデータが作成されることがあります。二度目の呼び出しについての痕跡はありません。これはNeo4j 3.0.6およびneo4j-ogm 2.0.5 - データベースに重複データを作成
@Configuration
@EnableNeo4jRepositories(basePackages = "com.example.neo.repository")
@EnableTransactionManagement
public class Neo4jConfig extends Neo4jConfiguration {
@Override
@Bean
public SessionFactory getSessionFactory() {
// with domain entity base package(s)
return new SessionFactory("com.example.neo.model", "BOOT-INF.classes.com.example.neo.model");
}
// needed for session in view in web-applications
@Override
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return super.getSession();
}
}
これは私が私の関数と呼ば方法です私のNeo4jのコンフィグである。これは持っているinitializationService機能
private String[][] currencyList = {
{ "USD", "7.5" },
{ "DKK", "1" },
{ "AFN", "1"},{ "EUR", "1"},{ "ALL", "1"},{ "DZD", "1"},{ "USD", "1"},{ "AOA", "1"},{ "XCD", "1"},
{ "ARS", "1"},{ "AMD", "1"},{ "AWG", "1"},{ "SHP", "1"},{ "AUD", "1"},{ "AZN", "1"},{ "BSD", "1"},
{ "BHD", "1"},{ "BDT", "1"},{ "BBD", "1"}
}
@Override
public void initCurrency() {
for (String[] currency : currencyList) {
Currency existCurrency = currencyService.findByName(currency[0]);
if (existCurrency == null) {
existCurrency = new Currency(currency[0], Double.valueOf(currency[1]));
currencyService.save(existCurrency);
}
}
}
おそらく、通貨コードに一意性制約を追加する必要があります。重複を防止し、何がうまくいかないかを明らかにするためです。 –
@JasperBlues findByNameを使用して、一意のIDを既に追加して重複を防止しています。 CUrrencyが存在する場合は、保存コードをスキップする必要があります。しかし、私がneo4jデータベースをチェックすると、二重のデータにdiffernt unique IDがあります。 –
Jasperが意味することは、 'CREATE CONSTRAINT ON(n:Currency)ASSERT n.name IS UNIQUE'(通貨の' name'プロパティに 'USD'が入っていると仮定して通貨の名前を一意にする必要があるということです。 'ラベル)。アプリケーションは、同じ通貨名を持つ2つのノードを作成することができず、2つ目のノードは失敗し、ログに例外があります。 –