2016-10-04 68 views
0

我想使用JPA將新列添加到MySQL表。我怎樣才能實現它?通過JPA向MySQL添加新列通過JPA

我擔心的是,即使表可以更新,我如何更新實體以便該列可用於使用JPA查詢?還是有其他解決方案嗎?

+0

我認爲最簡單的解決方案可能是找到解決方法,以便需要用戶修改數據庫模式。你能否介紹一下業務邏輯? –

+0

由於用戶(客戶端)無法直接與數據庫模式通信,所以這就是爲什麼我希望實現這種方式來允許在客戶端更新數據庫... – helloworld1234

+0

這並不真正回答我的問題。爲什麼客戶端會被允許修改數據庫模式?例如,如果允許添加新列,那麼如何防止惡意攻擊?您現在必須擔心流氓用戶通過創建數千個列來進入桌面並使其爆炸。 –

回答

0

JPA不提供「即時」模式更新(當然不適用於實體類的動態更新)。

某些提供程序將允許在創建EMF(例如DataNucleus JPA)時添加列,以便可以重新加載實體類。這就是全部。除此之外,重新構建您的應用程序

+0

嗯...明白了,也許重新設計師是唯一的方式。謝謝。 – helloworld1234

1

有幾種方法可以做到這一點,主要是通過persistence.xml中的屬性。一種標準的方法是使用javax.persistence.schema-generation.scripts.create-script-source,這可能會或可能不會在您每次啓動web應用程序時運行,最有可能導致啓動時出現異常並可能導致數據被破壞。

在Hibernate中,您可以根據您的實體使用hibernate.hbm2ddl.autoupdate來更新您的表格。

http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#configurations-hbmddl

在那裏的EclipseLink是eclipselink.ddl-generation財產。 create-or-extend-tables設置似乎是適當的。

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_ddl_generation.htm

然而,一般來說,使用JPA保持你的模式是比預先寫好的腳本在更新生產服務器的Web應用程序時手動更新它不太可靠。