2012-01-06 11 views
8

データベース:JPAテーブル "配列" は存在しません

user_account 
id(pk) 
email 
password 
... 

user_detail 
id(pk fk) 
name_first 
name_last 
... 

エンティティ

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

アクション

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

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

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 = ?")

10エラーは、私が@PrimaryKeyJoinColumnにより合併二つの異なるエンティティを持つ、他の方法で回避を試みたが、私は同じエラーを得ました。

+0

メッセージには、シーケンステーブルが必要だというメッセージがあります。なぜあなたはそれを作成していないのですか? –

+0

しかし、そこにいなければ、なぜこのテーブルが必要でしょうか? – TGM

答えて

14

EclipseLinkがこのテーブルにアクセスしようとすると、そのテーブルに存在するはずです。 GenerationType.AUTOは、EclipseLinkがデータベース(MySQL)に最も適切な世代型を選択することを意味します。この場合、選択肢はテーブルを必要とするテーブルベースのジェネレータを使用することです。 http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/GeneratedValueを参照してください。

この戦略を使用しない場合は、別の戦略を選択してください。

+0

与えられたリンクは死んでいます。 –

5

私はこの種のことを何百回もやったにもかかわらず、このエラーは一度も起こりませんでした。私はpersistence.xmlでテーブルを作成するためにHibernateプロパティを持っていたので、このエラーががわかったが、EclipseLinkはを使用していました:

それがあった:

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

私は、エラーを修正するために次のように変更:

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

私はpersistence.xmlで定義されたプロパティの最初のものは持っていませんが、私のために働きました。 suggestプロパティを追加すると、例外が取り除かれました。 –

-1

設定ファイルで、org.hibernate.dialect.oracle10gdialect行を忘れる可能性があります。確かに、org.hibernate.dialect.mysqldialectはすべきです。

関連する問題