1
在我的JPA2/Hibernate應用程序中,我有表USERS和匹配實體User + DAO。jpa2 hibernate使用現有實體從視圖加載數據
現在,我創建了視圖V_USERS,其中包含表USERS的過濾數據。
我可以重用實體用戶從這個視圖查詢數據嗎?
在我的JPA2/Hibernate應用程序中,我有表USERS和匹配實體User + DAO。jpa2 hibernate使用現有實體從視圖加載數據
現在,我創建了視圖V_USERS,其中包含表USERS的過濾數據。
我可以重用實體用戶從這個視圖查詢數據嗎?
不,你不能。您可以將兩個不同的類映射到同一個表中,但不能反過來。
這樣做的原因限制很簡單,將JPA提供者是怎麼知道你有沒有考慮下面的查詢該表:
em.createQuery("SELECT u FROM User u");
但是你可能想創建一個基類AbstractUser
所有屬性並且必須清空子類:User
,例如VUser
。後兩個類將映射到不同的表/視圖。見MappedSuperclass和那裏的一個例子。
@MappedSuperclass
public abstract class AbstractUser {
//all your columns/JPA mapping go here
}
@Entity
@Table(name="USERS")
public class User extends AbstractUser {}
@Entity
@Table(name="V_USERS")
public class VUser extends AbstractUser {}
我的問題可能不夠準確。我不想從視圖中獲得完全託管實體,只需使用UserDAO方法,如:'List getUsersFromView()'。我想我可以使用原生查詢和映射結果到實體類來完成此操作。不確定,因爲我是JPA新手,但會檢查。 –
alephx