排除hibernate创建的特定表?

时间:2015-11-12 20:16:52

标签: spring hibernate jpa spring-data

我有@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:不成功:   create table user_profile(user_id bigint not null,avg_airtime   整数,avg_fuel_points整数,avg_miles整数,电子邮件   varchar(255),first_name varchar(255),flights_count整数,   furthest_flight integer,last_name varchar(255),longest_flight   整数,most_visited_city varchar(255),tier_end整数,tier_start   整数,主键(user_id))2015-11-12 21:56:34.841 ERROR 4204 ---   [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport:Table   ' user_profile'已存在

我可以配置hibernate,以便跳过这些实体的创建吗?我认为@Immutable注释告诉Hibernate跳过创建,但似乎这个注释只是为了防止表上的crud操作。

1 个答案:

答案 0 :(得分:15)

@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;
}