2016-08-23 105 views

回答

0

爲了使這個工作,你必須引導休眠。爲此:

在您的主類中,找到您的EntityManagerFactory實例。它可能看起來像這樣:

public static final EntityManagerFactory EMPFAC = Persistence.createEntityManagerFactory("jpa") 

現在離開那條線。在它之上,添加以下內容:

private static StandardServiceRegistryBuilder servReg = new StandardServiceRegistryBuilder(); 
static { 
    //Do this for every property in persistence.xml 
    servReg.applySetting("hibernate.connection.url", "jdbc://myurl://www.example.org"); 
} 

爲每個屬性添加一個servReg.applySetting()persistence.xml。接着,添加此下方:

private static MetadataSources sources = new MetadataSources(servReg.build()); 
static { 
    // Do this for every pojo with JPA annotations 
    sources.addAnnotatedClass(Pojo.class); 
} 

添加sources.addAnnotatedClass()爲應用程序中每個JPA註解的POJO。幾乎在這裏完成。現在創建一個像這樣實現StatementInspector類:

public class Inspector implements StatementInspector { 

    private static final long serialVersionUID = 5545844969759630544L; 

    @Override 
    public String inspect(String select) { 
     // modify string here 
     return select; 
    } 
} 

最後,回到你的主應用程序類,並且,下面在那裏您註冊的POJO靜態塊,添加以下內容:

public static final SessionFactory EMPFAC = sources.buildMetadata().getSessionFactoryBuilder().applyStatementInspector(new Inspector()).build(); 

現在您可以回到persistence.xml並刪除那裏的屬性聲明。如果你還沒有,也刪除你的public static final EntityManager聲明(你用SessionFactory替換了它)。

編輯:你實際上可以刪除persistence.xml,你的應用程序仍然可以正常工作。

全套!

2

不要做這樣的)

你只需要兩樣東西:

  1. 添加屬性persistence.xml中:

屬性名= 「hibernate.session_factory.statement_inspector」 value =「完全合格的類名」

  1. 通過實現接口編寫您的監聽器類或g.hibernate.resource.jdbc.spi.StatementInspector。

利潤!