爲了使這個工作,你必須引導休眠。爲此:
在您的主類中,找到您的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
,你的應用程序仍然可以正常工作。
全套!