ogm neo4j
在下面的视频中,我演示了一个使用Neo4J数据库和Neo4J OGM的Quarkus应用程序示例。
我为咖啡豆创建了一个示例域,其中包含我们可以查询和匹配的某些风味配置文件。 红色节点是来自某个国家/地区的咖啡豆,味道像某些口味。 豆类原产国也因某些风味而“闻名”。
在当前的1.4.2.Final
版本中,Quarkus带有基本的Neo4J支持 ,但在撰写本文时还没有包括对OGM映射的支持。 但是,我们可以使用一个简单的生产者添加支持,该生产者公开Neo4J OGM SessionFactory
:
import org.neo4j.ogm.config.Configuration; import org.neo4j.ogm.session.SessionFactory; ... @ApplicationScoped public class SessionFactoryProducer {
public static final String PACKAGE = "com.sebastian_daschner.coffee.entity" ;
@ConfigProperty (name = "quarkus.neo4j.uri" )
String databaseUri;
@ConfigProperty (name = "quarkus.neo4j.authentication.username" )
String username;
@ConfigProperty (name = "quarkus.neo4j.authentication.password" )
String password;
@Produces
SessionFactory produceSessionFactory() {
Configuration neoConfig = new Configuration.Builder()
.uri(databaseUri)
.credentials(username, password)
.useNativeTypes()
.build();
return new SessionFactory(neoConfig, PACKAGE);
}
void disposeSessionFactory( @Disposes SessionFactory sessionFactory) {
sessionFactory.close();
} }
现在,我们可以将SessionFactory
注入到我们的bean中,并使用它来查询图形数据库:
import org.neo4j.ogm.session.*; ... @ApplicationScoped public class CoffeeBeans {
@Inject
SessionFactory sessionFactory;
public List<CoffeeBean> getCoffeeBeans() {
Session session = sessionFactory.openSession();
return new ArrayList<>(session.loadAll(CoffeeBean. class ,
new SortOrder( "name" ), 1 ));
}
public List<CoffeeBean> getCoffeeBeansSpecificFlavor(String flavor) {
Session session = sessionFactory.openSession();
Iterable<CoffeeBean> result = session.query(CoffeeBean. class ,
"MATCH (b:CoffeeBean)-[:TASTES]->(:Flavor {description: $flavor})\n" +
"MATCH (b)-[isFrom:IS_FROM]->(country)\n" +
"MATCH (b)-[tastes:TASTES]->(flavor)\n" +
"RETURN b, collect(isFrom), collect(country)," +
" collect(tastes), collect(flavor)\n" +
"ORDER by b.name;" ,
Map.of( "flavor" , flavor));
return resultList(result);
}
... }
我的示例图如下所示,其中CoffeeBean
对象是通过Neo4J OGM映射的:
import org.neo4j.ogm.annotation.*; ... @NodeEntity public class CoffeeBean {
@Id
public String name;
@Relationship ( "IS_FROM" )
public Set<Origin> origins = new HashSet<>();
@Property
public Roast roast;
@Relationship ( "TASTES" @Relationship "TASTES" )
public Set<FlavorProfile> flavorProfiles = new HashSet<>();
... }
玩得开心探索您的图表! 作为进一步的练习,您可以编写查询来匹配具有某种风味的咖啡豆作为其“主要”风味(百分比最高的咖啡豆)或具有相似风味特征的咖啡豆等。
翻译自: https://www.javacodegeeks.com/2020/05/neo4j-ogm-with-quarkus.html
ogm neo4j
所有评论(0)