apprentice321-gM/Ye1E23mwN+
2014-06-03 15:23:34 UTC
I have a Jpa entity which also acts as a Neo4j cross store. Most of the
fields in the entity are saved to Mysql database except the Collection
'followers', which is stored in Neo4j. The problem is with the Collection
'followers'. it throws the exception "hibernate MappingException: Could not
determine type for: java.util.Set". A quick search yields a bunch of Jpa
Related solutions (e.g. adding onetomany annotation to the field etc) which
I assume is not relevant in this case because the collection is saved in
Neo4j not Mysql.
StacktraceCaused by: org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: game, for columns: [org.hibernate.mapping.Column(followers)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:314)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:292)
at org.hibernate.mapping.Property.isValid(Property.java:239)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:469)
at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1303)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1761)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
... 16 more
-------@***@Table(name="game")@NodeEntity(partial = true)public class Game implements Serializable{
private static final long serialVersionUID = 1L;
@RelatedTo(type="GAME", direction=Direction.INCOMING, elementClass = Account.class)
@Fetch
@GraphProperty
private Set<Account> followers = new HashSet<Account>();
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="game_id")
private Long gameId;
@Column(name="name",unique=true)
private String name; ....
//Accessors
public Long getGameId() {
return gameId;
}
public void setGameId(Long gameId) {
this.gameId = gameId;
}...
@Override
public String toString(){
return "...";
}
}
Neo4j Config
@Configuration
@ComponentScan(basePackages={".."})@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)@EnableNeo4jRepositories(value={".."})public class Neo4JConfig extends Neo4jConfiguration{
@Bean(destroyMethod = "shutdown")
@Scope(SCOPE_PROTOTYPE)
public SpringRestGraphDatabase graphDatabaseService(){
SpringRestGraphDatabase springRestGraphDatabase = new SpringRestGraphDatabase("http://localhost:7474/db/data");
return springRestGraphDatabase;
}
@Bean
public Neo4jTemplate neo4jTemplate(){
return new Neo4jTemplate((GraphDatabase) graphDatabaseService());
}
@Bean
public Neo4jMappingContext neo4jMappingContext() {
return new Neo4jMappingContext();
}}
fields in the entity are saved to Mysql database except the Collection
'followers', which is stored in Neo4j. The problem is with the Collection
'followers'. it throws the exception "hibernate MappingException: Could not
determine type for: java.util.Set". A quick search yields a bunch of Jpa
Related solutions (e.g. adding onetomany annotation to the field etc) which
I assume is not relevant in this case because the collection is saved in
Neo4j not Mysql.
StacktraceCaused by: org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: game, for columns: [org.hibernate.mapping.Column(followers)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:314)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:292)
at org.hibernate.mapping.Property.isValid(Property.java:239)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:469)
at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1303)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1761)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
... 16 more
-------@***@Table(name="game")@NodeEntity(partial = true)public class Game implements Serializable{
private static final long serialVersionUID = 1L;
@RelatedTo(type="GAME", direction=Direction.INCOMING, elementClass = Account.class)
@Fetch
@GraphProperty
private Set<Account> followers = new HashSet<Account>();
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="game_id")
private Long gameId;
@Column(name="name",unique=true)
private String name; ....
//Accessors
public Long getGameId() {
return gameId;
}
public void setGameId(Long gameId) {
this.gameId = gameId;
}...
@Override
public String toString(){
return "...";
}
}
Neo4j Config
@Configuration
@ComponentScan(basePackages={".."})@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)@EnableNeo4jRepositories(value={".."})public class Neo4JConfig extends Neo4jConfiguration{
@Bean(destroyMethod = "shutdown")
@Scope(SCOPE_PROTOTYPE)
public SpringRestGraphDatabase graphDatabaseService(){
SpringRestGraphDatabase springRestGraphDatabase = new SpringRestGraphDatabase("http://localhost:7474/db/data");
return springRestGraphDatabase;
}
@Bean
public Neo4jTemplate neo4jTemplate(){
return new Neo4jTemplate((GraphDatabase) graphDatabaseService());
}
@Bean
public Neo4jMappingContext neo4jMappingContext() {
return new Neo4jMappingContext();
}}
--
You received this message because you are subscribed to the Google Groups "Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email to neo4j+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/***@public.gmane.org
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to the Google Groups "Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email to neo4j+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/***@public.gmane.org
For more options, visit https://groups.google.com/d/optout.