Hibernate Books

All times are UTC - 5 hours [ DST ]



Post new topic Reply to topic  [ 3 posts ] 
Author Message
 Post subject: Map<String,embedded> breaks with Neo4j/Bolt
PostPosted: Tue Feb 14, 2017 3:45 pm 
Newbie

Joined: Thu Jan 05, 2017 1:47 pm
Posts: 9
This seems to be broken with Bolt. It works fine with an embedded Neo4j connection.

We have a field defined as:

@ElementCollection(fetch = FetchType.EAGER)
private java.util.Map<String,MockEmbedded> mapOfEmbedded;

MockEmbedded is annotated with @Embeddable, and contains two fields of types int (value1) and String (value2). The latter was left null for this test.

The data seems to be written to the database, though the result seems suspect (not sure what it's suppose to look like though):
- itcreates an edge, with label 'mapOfEmbedded', from entity with property mapOfEmbedded_KEY=<key>
- to a node, with label '<entityname>_mapOfEmbedded' and no properties
- another edge, with label 'value', and no properties
- to a node, with only the label 'EMBEDDED', and a property value1=<value>

Seems like that intermediate node might be superfluous, or maybe there's a good reason for it.

And I don't know what it looks like in the db when I use an embedded Neo4j connection. I'm not sure of an easy way to extract that information.

Plain embedded, and List<embedded>, fields work fine with both connection types.


Top
 Profile  
 
 Post subject: Re: Map<String,embedded> breaks with Neo4j/Bolt
PostPosted: Wed Feb 15, 2017 9:50 am 
Newbie

Joined: Thu Jan 05, 2017 1:47 pm
Posts: 9
In case it's useful, here's the relevant part of the trace logs while using Bolt:

08:25:23.100 [Test worker] DEBUG o.h.o.p.impl.OgmCollectionPersister - Inserting collection: [com.nokia.nspos.model.domain.mock.entities.MockEntity.mapOfEmbedded#262]
08:25:23.100 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [262] to parameter(s) [mock_MockEntity_dbId]
08:25:23.100 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [equip] to parameter(s) [mapOfEmbedded_KEY]
08:25:23.100 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [2] to parameter(s) [mapOfEmbedded.value.value1]
08:25:23.100 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [null] to parameter [mapOfEmbedded.value.value2]
08:25:23.101 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [262] to parameter(s) [mock_MockEntity_dbId]
08:25:23.101 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [262] to parameter(s) [dbId]
08:25:23.103 [Test worker] TRACE org.hibernate.ogm.datastore.access - Reading association with key AssociationKey(mock_MockEntity_mapOfEmbedded) [mock_MockEntity_dbId=262] from datastore and context AssociationContextImpl [associationTypeContext=AssociationContext [optionsContext=OptionsContextImpl [entityType=class com.nokia.nspos.model.domain.mock.entities.MockEntity, propertyName=mapOfEmbedded]], operationsQueue=null, entityTuple=TuplePointer[Tuple[mockFloat=0.0, mockString=mock, mockEnum2=1, mockEnum=0, mockTimestamp=1459399611000, mockLong2=0, _modelVersion=1.0.1, mockEnum3=0, mockLong=1, mockBoolean2=false, anotherSource.namespace=sam, mockInt=1, anotherSource.fdn=abc:def, dbId=262, mockFloat2=0.0, singleEmbedded.value1=3, DTYPE=mock_MockEntity, singleEmbedded.value2=hello, _version=0, myFloat=0.0, superValue1=0, mockBoolean=false, nativeMockInt=1, mockBigInt=10, mockTimestamp2=0, anotherSource.scheme=1, mockBigInt2=10]]]
08:25:23.197 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [262] to parameter(s) [mock_MockEntity_dbId]
08:25:23.197 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [fm] to parameter(s) [mapOfEmbedded_KEY]
08:25:23.197 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [1] to parameter(s) [mapOfEmbedded.value.value1]
08:25:23.197 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [null] to parameter [mapOfEmbedded.value.value2]
08:25:23.197 [Test worker] TRACE org.hibernate.ogm.datastore.access - Creating association with key AssociationKey(mock_MockEntity_mapOfEmbedded) [mock_MockEntity_dbId=262] in datastore
08:25:23.202 [Test worker] TRACE org.hibernate.ogm.datastore.access - Determining whether association DefaultAssociationKeyMetadata [table=mock_MockEntity_mapOfEmbedded, columnNames=[mock_MockEntity_dbId], isInverse=false, collectionRole=mapOfEmbedded, associationKind=EMBEDDED_COLLECTION, rowKeyColumnNames=[mock_MockEntity_dbId, mapOfEmbedded_KEY], rowKeyIndexColumnNames=[mapOfEmbedded_KEY], associatedEntityKeyMetadata=DefaultAssociatedEntityKeyMetadata [associationKeyColumns=[mapOfEmbedded.value.value1, mapOfEmbedded.value.value2], entityKeyMetadata=DefaultEntityKeyMetadata{table='mock_MockEntity_mapOfEmbedded', columnNames=[mapOfEmbedded.value.value1, mapOfEmbedded.value.value2]}]] is stored in an entity structure
08:25:23.203 [Test worker] DEBUG o.h.o.p.impl.OgmCollectionPersister - done inserting collection: 2 rows inserted


And here it is for Embedded Neo4j:

08:39:47.234 [Test worker] DEBUG o.h.o.p.impl.OgmCollectionPersister - Inserting collection: [com.nokia.nspos.model.domain.mock.entities.MockEntity.mapOfEmbedded#1]
08:39:47.234 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [1] to parameter(s) [mock_MockEntity_dbId]
08:39:47.234 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [equip] to parameter(s) [mapOfEmbedded_KEY]
08:39:47.234 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [2] to parameter(s) [mapOfEmbedded.value.value1]
08:39:47.234 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [null] to parameter [mapOfEmbedded.value.value2]
08:39:47.234 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [1] to parameter(s) [mock_MockEntity_dbId]
08:39:47.235 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [1] to parameter(s) [dbId]
08:39:47.238 [Test worker] TRACE org.hibernate.ogm.datastore.access - Reading association with key AssociationKey(mock_MockEntity_mapOfEmbedded) [mock_MockEntity_dbId=1] from datastore and context AssociationContextImpl [associationTypeContext=AssociationContext [optionsContext=OptionsContextImpl [entityType=class com.nokia.nspos.model.domain.mock.entities.MockEntity, propertyName=mapOfEmbedded]], operationsQueue=null, entityTuple=TuplePointer[Tuple[mockFloat=0.0, mockString=mock, mockEnum2=1, mockEnum=0, mockTimestamp=1459399611000, mockLong2=0, _modelVersion=1.0.1, mockEnum3=0, mockLong=1, mockBoolean2=false, anotherSource.namespace=sam, mockInt=1, anotherSource.fdn=abc:def, dbId=1, mockFloat2=0.0, singleEmbedded.value1=3, DTYPE=mock_MockEntity, singleEmbedded.value2=hello, _version=0, myFloat=0.0, mockBoolean=false, superValue1=0, nativeMockInt=1, mockBigInt=10, mockTimestamp2=0, anotherSource.scheme=1, mockBigInt2=10]]]
08:39:47.260 [Test worker] TRACE o.h.o.d.n.logging.impl.GraphLogger - Found owner node: (:`MOCK_MOCKENTITY`:ENTITY{dbId:1, mockFloat:0.0, mockString:"mock", mockEnum2:1, mockEnum:0, mockTimestamp:1459399611000, mockLong2:0, `_modelVersion`:"1.0.1", mockEnum3:0, mockLong:1, mockBoolean2:false, mockInt:1, mockFloat2:0.0, DTYPE:"mock_MockEntity", myFloat:0.0, `_version`:0, mockBoolean:false, superValue1:0, mockBigInt:"10", nativeMockInt:1, mockTimestamp2:0, mockBigInt2:"10"})
08:39:47.364 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [1] to parameter(s) [mock_MockEntity_dbId]
08:39:47.364 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [fm] to parameter(s) [mapOfEmbedded_KEY]
08:39:47.364 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [1] to parameter(s) [mapOfEmbedded.value.value1]
08:39:47.364 [Test worker] TRACE o.h.o.t.d.impl.BasicGridBinder - binding [null] to parameter [mapOfEmbedded.value.value2]
08:39:47.365 [Test worker] TRACE org.hibernate.ogm.datastore.access - Creating association with key AssociationKey(mock_MockEntity_mapOfEmbedded) [mock_MockEntity_dbId=1] in datastore
08:39:47.422 [Test worker] TRACE o.h.o.d.n.logging.impl.GraphLogger - Created relationship: (:`MOCK_MOCKENTITY`:ENTITY{dbId:1, mockFloat:0.0, mockString:"mock", mockEnum2:1, mockEnum:0, mockTimestamp:1459399611000, mockLong2:0, `_modelVersion`:"1.0.1", mockEnum3:0, mockLong:1, mockBoolean2:false, mockInt:1, mockFloat2:0.0, DTYPE:"mock_MockEntity", myFloat:0.0, `_version`:0, mockBoolean:false, superValue1:0, mockBigInt:"10", nativeMockInt:1, mockTimestamp2:0, mockBigInt2:"10"}) - [mapOfEmbedded{`mapOfEmbedded_KEY`:"equip"}] - (:EMBEDDED:`mock_MockEntity_mapOfEmbedded`)
08:39:47.424 [Test worker] TRACE o.h.o.d.n.logging.impl.GraphLogger - Created relationship: (:`MOCK_MOCKENTITY`:ENTITY{dbId:1, mockFloat:0.0, mockString:"mock", mockEnum2:1, mockEnum:0, mockTimestamp:1459399611000, mockLong2:0, `_modelVersion`:"1.0.1", mockEnum3:0, mockLong:1, mockBoolean2:false, mockInt:1, mockFloat2:0.0, DTYPE:"mock_MockEntity", myFloat:0.0, `_version`:0, mockBoolean:false, superValue1:0, mockBigInt:"10", nativeMockInt:1, mockTimestamp2:0, mockBigInt2:"10"}) - [mapOfEmbedded{`mapOfEmbedded_KEY`:"fm"}] - (:EMBEDDED:`mock_MockEntity_mapOfEmbedded`)

08:39:47.424 [Test worker] TRACE org.hibernate.ogm.datastore.access - Determining whether association DefaultAssociationKeyMetadata [table=mock_MockEntity_mapOfEmbedded, columnNames=[mock_MockEntity_dbId], isInverse=false, collectionRole=mapOfEmbedded, associationKind=EMBEDDED_COLLECTION, rowKeyColumnNames=[mock_MockEntity_dbId, mapOfEmbedded_KEY], rowKeyIndexColumnNames=[mapOfEmbedded_KEY], associatedEntityKeyMetadata=DefaultAssociatedEntityKeyMetadata [associationKeyColumns=[mapOfEmbedded.value.value1, mapOfEmbedded.value.value2], entityKeyMetadata=DefaultEntityKeyMetadata{table='mock_MockEntity_mapOfEmbedded', columnNames=[mapOfEmbedded.value.value1, mapOfEmbedded.value.value2]}]] is stored in an entity structure
08:39:47.424 [Test worker] DEBUG o.h.o.p.impl.OgmCollectionPersister - done inserting collection: 2 rows inserted

I've highlighted the differences.


Top
 Profile  
 
 Post subject: Re: Map<String,embedded> breaks with Neo4j/Bolt
PostPosted: Wed Feb 15, 2017 12:56 pm 
Hibernate Team
Hibernate Team

Joined: Fri Sep 09, 2011 3:18 am
Posts: 263
Thanks for the feedback, I'll look into this


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.