2015-11-12 10 views
8

Ho un @Entity che viene mappato a una vista, ecco come appareEscludere una tabella specifica dalla creazione da sospensione?

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

Questo funziona bene, posso recuperare i record dal punto di vista utilizzando il dao. Tuttavia ho notato nei registri che Hibernate sta effettivamente cercando di creare la tabella ma fallendo perché esiste già.

2015-11-12 21: 56: 34,841 ERRORE 4204 --- [ost-STARTSTOP-1] org.hibernate.tool.hbm2ddl.SchemaExport: HHH000389: non riuscito: create table user_profile (user_id bigint non nullo, avg_airtime intero, avg_fuel_points intero, avg_miles intero, email varchar (255), first_name varchar (255), integer flights_count, furthest_flight intero, cognome varchar (255), longest_flight intero, most_visited_city varchar (255), tier_end intero, tier_start intero, chiave primaria (user_id) 2015-11-12 21: 56: 34.841 ERRORE 4204 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.Schema Export: Tabella 'profilo_utente' esiste già

Posso configurare hibernate così salta la creazione di tali entità? Ho pensato che l'annotazione @Immutable indichi a Hibernate di saltare la creazione, ma sembra che questa annotazione serva solo a prevenire operazioni di crudismo sul tavolo.

+0

AFAIK, sospensione non supporta questa. –

+0

Si prega di vedere la risposta qui: http://stackoverflow.com/questions/438146/hibernate-hbm2ddl-auto-possibile-valori-e-qualcuno-io- probabilmente si desidera solo utilizzare "aggiornamento", non "creare" schema ogni volta – Zilvinas

+0

Grazie per i commenti ragazzi. @Zilvinas Speravo che la primavera ignorasse quelle entità quando ho 'create-drop'. – prettyvoid

risposta

11

Il @Subselect nota è l'unico annotazioni in Hibernate che impedisce la creazione della tabella relativa per un @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

Grazie per l'informazione. Devo specificare i parametri che voglio usare nelle mie query all'interno della clausola 'WHERE' di' @ Subselect'? o il dao sarà sufficiente? Non sono esattamente sicuro quando verrà usata la frase all'interno dell'annotazione subselect. – prettyvoid

+1

Il DAO è sufficiente, specialmente se si desidera creare query diverse per la vista. La sottoselezione è la sostituzione della tabella: 'SELECT ... FROM table' è sostituita con' SELECT ... FROM (seleziona * da user_earning) ' –

+0

Grande, grazie per la spiegazione :) – prettyvoid