スーパータイプをラベルの1つとして保存できるNeo4jの機能は本当に素晴らしいのですが、思ったようにスーパータイプのセットを取得できません。
スーパークラスは Service と呼ばれます
@NodeEntity
public abstract class Service implements java.io.Serializable {...}
サブクラスは HostingService と呼ばれます
@NodeEntity
public class HostingService extends Service implements java.io.Serializable{
@GraphId Long id;
....
}
そして、一連の Service を所有する SystemCatalog というクラスがあります。
@NodeEntity
public class SystemCatalog implements java.io.Serializable{
@GraphId Long id;
....
@Relationship(type="SERVICE", direction=Relationship.OUTGOING)
private Set<Service> services = new HashSet<>();
}
保存テスト メソッドはうまくいきます。neo4j ブラウザーは、HostingService が両方のラベル (Service と HostingService) で保存されていることを示しています。
@Test
public void testSaveService(){
SystemCatalog sys = new SystemCatalog();
sys.setSystemName("Test Service");
HostingService host = new HostingService();
host.setCostCenter("Cost Center A");
sys.getServices().add(host);
Long id = systemCatalogRepository.save(sys).getId();
System.out.println(id);
}
取得したテスト メソッドが間違っていました。返された SystemCatalog にはサービスがまったくありません
@Test
public void testGetService(){
SystemCatalog sys2 = systemCatalogRepository.findOne(new Long(243));
System.out.println(sys2);
}