2012-01-06 53 views
8

Cơ sở dữ liệu:JPA bảng "chuỗi" không tồn tại

user_account 
id(pk) 
email 
password 
... 

user_detail 
id(pk fk) 
name_first 
name_last 
... 

Entity

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

Action

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

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

Lỗi

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

Tôi đã thử các cách khác xung quanh, có hai thực thể khác nhau được sáp nhập bởi @PrimaryKeyJoinColumn nhưng tôi đã cùng một lỗi.

+0

Vâng, thông báo cho biết bạn cần phải có một bảng tuần tự. Tại sao bạn không tạo ra nó? –

+0

Nhưng tại sao tôi cần bảng này nếu không được cho là ở đó? – TGM

Trả lời

14

Nếu EclipseLink cố gắng truy cập vào bảng này, điều đó có nghĩa là nó được cho là ở đó. GenerationType.AUTO có nghĩa là EclipseLink chọn loại thế hệ phù hợp nhất cho cơ sở dữ liệu của bạn (MySQL). Trong trường hợp này, lựa chọn là sử dụng trình tạo bảng dựa trên bảng, cần một bảng. Xem http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/GeneratedValue.

Nếu bạn không muốn sử dụng chiến lược này, hãy chọn một chiến lược khác.

+0

Liên kết đã cho đã chết. –

5

Tôi chưa bao giờ gặp lỗi này trước khi làm điều này hàng trăm lần. Tôi tìm thấy lỗi này là vì tôi có một tài sản ngủ đông để tạo bảng trong persistence.xml nhưng đã sử dụng EclipseLink:

Đó là:

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

tôi đã thay đổi đến sau để khắc phục lỗi:

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

Làm việc cho tôi, mặc dù tôi không có thuộc tính đầu tiên được định nghĩa trong persistence.xml. Việc thêm thuộc tính đề xuất đã lấy đi ngoại lệ. –

-1

Trong tệp cấu hình, bạn có thể quên dòng org.hibernate.dialect.oracle10gdialect. Thật vậy, phải có org.hibernate.dialect.mysqldialect.

Các vấn đề liên quan