2012-01-06 8 views
8

Base de datos:mesa de APP "secuencia" no existe

user_account 
id(pk) 
email 
password 
... 

user_detail 
id(pk fk) 
name_first 
name_last 
... 

Entidad

@Entity 
@Table(name="user_account")  
@SecondaryTable(name="user_detail", [email protected]()) 
public class UserAccount implements Serializable{ 
    private static final long serialVersionUID = -2606506548742732094L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer id; 
    private String email; 
    private String password; 
    private String tab; 
    private String shortcut; 
    private String setting; 
    private Integer role; 

    @Column(table="user_detail", name="name_first") 
    private String nameFirst; 
    @Column(table="user_detail", name="name_last") 
    private String nameLast; 
    @Column(table="user_detail") 
    private String occupation; 
    @Column(table="user_detail") 
    @Temporal(TemporalType.DATE) 
    private Date birth; 
    .... 
} 

Acción

try{ 
     EntityTransaction transaction = em.getTransaction(); 
     transaction.begin(); 
     em.persist(currentUser); 

     transaction.commit(); 
    } catch (Exception e){ 
    } 

Error

INFO: [EL Warning]: 2012-01-06 18:45:46.77--ClientSession(17472935)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'mazedb.sequence' doesn't exist Error Code: 1146 Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? bind => [2 parameters bound] Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")

INFO: ERROR: Internal Exception: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'mazedb.sequence' doesn't exist Error Code: 1146 Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? bind => [2 parameters bound] Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")

me trataron a la inversa, que tiene dos entidades diferentes fusionadas por @PrimaryKeyJoinColumn pero me dio el mismo error.

+0

Bueno, el mensaje dice que debe tener una tabla de secuencias. ¿Por qué no lo creas? –

+0

¿Pero por qué necesitaría esta tabla si no debería estar allí? – TGM

Respuesta

14

Si EclipseLink intenta acceder a esta tabla, eso significa que se supone que debe estar allí. GenerationType.AUTO significa que EclipseLink elige el tipo de generación más apropiado para su base de datos (MySQL). En este caso, la opción es usar un generador basado en tablas, que necesita una tabla. Ver http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/GeneratedValue.

Si no desea utilizar esta estrategia, elija otra.

+0

El enlace dado está muerto. –

5

Nunca había tenido este error antes a pesar de hacer este tipo de cosas cientos de veces. He encontrado este error era porque tenía una propiedad de hibernación para la creación de tablas en la persistence.xml pero estaba usando EclipseLink:

Era:

<property name="hibernate.hbm2ddl.auto" value="create"/> 

me cambiaron a la siguiente para corregir el error:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
    <!-- or just value="create-tables" --> 
+0

Funcionó para mí, aunque no tenía la primera propiedad definida en persistence.xml. Agregar la propiedad suggest quitó la excepción. –

-1

En el archivo de configuración, se puede olvidar la línea org.hibernate.dialect.oracle10gdialect. De hecho, org.hibernate.dialect.mysqldialect debería ser.

Cuestiones relacionadas