2013-10-30 47 views
1

我有這個要求,使用JBoss Datagrid來停止一些文件,並使其可搜索。所以,我正在考慮使用已經是JBoss一部分的Hibernate-search。但現在我卡住了。這是我在JUnit中生成的一個簡單代碼。如何在JBoss數據網格中使用hibernate-search?

@Test 
public void testName() throws Exception { 
    Cache<Object, Object> c = new DefaultCacheManager().getCache(); 
    c.put("id", new ProductDG("ean", "desc", newArrayList("image1"))); 

    ProductDG product = (ProductDG) c.get("id"); 
    assertTrue(product.getEAN().equals("ean")); 

    SessionFactory factory = new AnnotationConfiguration().buildSessionFactory(); 
    Session session = factory.openSession(); 

    FullTextSession fts = getFullTextSession(session); 
    fts.index(product); 

} 


@Indexed(index="Product") 
class ProductDG { 
    private String EAN; 
    private String description; 

    private List<String> images; 

    ProductDG(String EAN, String description, List<String> images) { 
     this.EAN = EAN; 
     this.description = description; 
     this.images = images; 
    } 

    String getEAN() { 
     return EAN; 
    } 

    String getDescription() { 
     return description; 
    } 

    List<String> getImages() { 
     return images; 
    } 
} 

但我得到這樣的錯誤。

org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set 
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:97) 
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:67) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:174) 
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) 
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1797) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1755) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1840) 
    at com.tesco.adapters.JBossDataGrid.testName(JBossDataGrid.java:27) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

我在想我沒有數據庫連接到。這將如何工作呢?有人告訴我必須使用JBoss Datagrid。我知道https://docs.jboss.org/hibernate/ogm/3.0/reference/en-US/html_single/,但它太新了,它剛剛在幾個月前出來。這可以完成嗎?

回答

0

JBoss Data Grid使用Hibernate Search是正確的,但它僅適用於索引和查詢定義:您不需要通過「傳統」Hibernate Session使用它。

  • 你不需要啓動的SessionFactory
  • 你甚至不需要在classpath
  • 你使用註解從Hibernate Search的

爲了使Hibernate的ORM罐子一個受你的域名啓發的例子,使用它你只需要在configuration of the Cache中啓用索引。

@Test 
public void testName() throws Exception { 
    Cache<Object, Object> c = new DefaultCacheManager("configuration-file.xml").getCache(); 
    c.put("id", new ProductDG("ean", "desc", newArrayList("image1"))); 
    //at this point your Product is already indexed (assuming you don't use transactions) 

    //Using the MatchAllDocsQuery we'll get a list of all instances: 
    CacheQuery query = searchManager.getQuery(new MatchAllDocsQuery(), ProductDG.class); 

    // Execute Query 
    List objectList = query.list(); 

    for (Object prod : objectList) 
     System.out.println(prod); 

} 

你最後的問題是關於Hibernate OGM。是的,這是可以做到很好,但你可能想閱讀的文檔版本4:

https://docs.jboss.org/hibernate/ogm/4.0/reference/en-US/html_single/

相關問題