2011-04-11 70 views
4

有沒有辦法讓persistence.xml動態數據? 我正在考慮在屬性文件中添加數據庫名稱屬性,然後創建表(如果不存在)。JPA persistence.xml

這可能嗎?

我使用EclipseLink(JPA2.0)和MySQL。

+0

有沒有可能使用spring? – Bozho 2011-04-11 12:13:03

+0

@Bozho:很快我猜...我在我的JavaSE上使用JPA來加快速度...... – 2011-04-11 12:30:52

+0

無論如何我都會添加我的spring解決方案:) – Bozho 2011-04-11 12:33:20

回答

3

如果您在獨立環境中使用JPA,則可以將其他屬性傳遞給Persistence.createEntityManagerFactory()

在應用程序服務器環境中,您可以使用從JNDI獲取的數據源。

+0

您能否提供更多關於Persistence.createEntityManagerFactory(persitence_name,map_name )? – 2011-04-11 12:21:47

+0

@Cyril:關鍵是來自地圖的屬性覆蓋來自'persistence.xml'的屬性。因此,您可以通過該地圖傳遞動態屬性。 – axtavt 2011-04-11 12:23:36

+0

地圖應該完全包含persistence.xml的屬性名稱的關鍵字? – 2011-04-11 12:30:02

0

如果您使用彈簧,您可以使用彈簧property-placeholder-configurer機制來做到這一點。只需擴展您的EclipseLink供應商適配器:

public class ExtendedJpaVendorAdapter extends XJpaVendorAdapter { 

    private Map<String, Object> vendorProperties; 

    @Override 
    public Map<String, Object> getJpaPropertyMap() { 
     Map<String, Object> properties = super.getJpaPropertyMap(); 
     properties.putAll(vendorProperties); 
     return properties; 
    } 

    public Map<String, Object> getVendorProperties() { 
     return vendorProperties; 
    } 

    public void setVendorProperties(Map<String, Object> vendorProperties) { 
     this.vendorProperties = vendorProperties; 
    } 

} 

然後您可以在spring xml文件中配置這些。