2015-11-12 41 views
8

我有被映射到一個視圖中@Entity,這裏是它的外觀排除由休眠創建的特定表嗎?

import org.hibernate.annotations.Immutable; 
import javax.persistence.*; 

@Table(name = "user_earning") 
@Entity 
@Immutable 
public class UserFlightEarning { 
    @Id public Long userId; 
    public Long flightId; 
    @Column(name = "flight_seq") public Long flightSequence; 
} 

這工作得很好,我可以從使用DAO的觀點檢索記錄。但是我在日誌中注意到Hibernate實際上正在嘗試創建表,但由於它已經存在而失敗。

2015年11月12日21:56:34.841 ERROR 4204 --- [OST-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport:HHH000389:不成功: 創建表user_profile(USER_ID BIGINT不爲空,avg_airtime 整數,avg_fuel_points整數,avg_miles整數,電子郵件 VARCHAR(255),如first_name VARCHAR(255),flights_count整數, furthest_flight整數,姓氏VARCHAR(255),longest_flight 整數,most_visited_city VARCHAR(255),tier_end integer,tier_start integer,primary key(user_id))2015-11-12 21:56:34.841錯誤4204 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.Schema導出:表 'user_profile'已存在

我可以配置hibernate嗎,以便它跳過創建這樣的實體嗎?我認爲@Immutable註釋告訴Hibernate跳過創建,但是看起來這個註釋只是爲了防止表上的crud操作。

+0

AFAIK,休眠不支持此。 –

+0

請在這裏看到答案:http://stackoverflow.com/questions/438146/hibernate-hbm2ddl-auto-possible-values-and-what-they-do你可能只想使用「更新」,而不是「創建」架構每次 – Zilvinas

+0

感謝評論傢伙。 @Zilvinas我希望在我有'create-drop'的時候讓春天忽略這些實體。 – prettyvoid

回答

11

@Subselect註釋是Hibernate唯一註釋防止相應的表的創建用於@Entity

@Entity 
@Subselect("select * from user_earning") 
public class UserFlightEarning { 

    @Id 
    public Long userId; 

    public Long flightId; 

    @Column(name = "flight_seq") 
    public Long flightSequence; 
} 
+0

感謝您的信息。我應該在'@ Subselect'查詢'WHERE'子句中指定我想在我的查詢中使用的參數嗎?或者道會是足夠的?我不確定什麼時候使用子選擇註釋中的語句。 – prettyvoid

+1

DAO就足夠了 - 特別是如果你想爲視圖構建不同的查詢。子選擇是對錶格的替換:'SELECT ... FROM table'被替換爲'SELECT ... FROM(select * from user_earning)' –

+0

非常好,謝謝你的解釋:) – prettyvoid