2012-01-06 68 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 = ?")

我試過的其他方式,具有@PrimaryKeyJoinColumn合併兩個不同的實體,但我得到了同樣的錯誤。

+0

那麼,消息說,你需要有一個序列表。你爲什麼不創造它? – 2012-01-06 17:18:27

+0

但是,如果不應該在那裏,爲什麼我需要這張桌子? – TGM 2012-01-06 17:26:31

回答

14

如果EclipseLink試圖訪問這個表,這意味着它應該在那裏。 GenerationType.AUTO意味着EclipseLink爲您的數據庫(MySQL)選擇最合適的生成類型。在這種情況下,選擇使用基於表的生成器,它需要一個表。見http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/GeneratedValue

如果您不想使用此策略,請選擇另一個。

+0

給定的鏈接已經死亡。 – 2015-08-24 14:01:19

5

儘管做了這樣的事情一百次,但我從未有過這個錯誤。我發現這個錯誤是因爲我有創造的persistence.xml表休眠特性,但使用的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中定義的第一個屬性。添加建議屬性消除了異常。 – 2015-08-24 14:01:00

-1

在配置文件中,org.hibernate.dialect.oracle10gdialect行可以被遺忘。的確,org.hibernate.dialect.mysqldialect應該是。