2016-01-13 29 views
0

我正在爲此掙扎數小時。如何將SQL表創建轉換爲JPA hibernate autocreation

這些都是我想在DB中創建了所有的PK和UQ等表

CREATE TABLE users (
    username VARCHAR(45) NOT NULL , 
    password VARCHAR(45) NOT NULL , 
    enabled TINYINT NOT NULL DEFAULT 1 , 
    PRIMARY KEY (username)); 

CREATE TABLE user_roles (
    user_role_id int(11) NOT NULL AUTO_INCREMENT, 
    username varchar(45) NOT NULL, 
    role varchar(45) NOT NULL, 
    PRIMARY KEY (user_role_id), 
    UNIQUE KEY uni_username_role (role,username), 
    KEY fk_username_idx (username), 
    CONSTRAINT fk_username FOREIGN KEY (username) REFERENCES users (username)); 

我不能把這種成Java實體JPA註解來達到同樣的結果D B。

我的用戶對象:

@Entity 
@Table(name = "users", catalog = "test") 
public class User { 

@Id 
@Column(name = "username") 
private String username; 
@Column(name = "password") 
private String password; 
@Column(name = "email") 
private String email; 
@Column(name = "birthdate") 
private Date birthDate; 
@Column(name = "proffesion") 
private String profession; 

而且我的UserRole對象:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "user_role_id", unique = true, nullable = false) 
private int id; 
@OneToOne(targetEntity=User.class) 
private String username; 
@Column(name="role") 
private String role; 

我已經試過的許多變化,但它沒有一個確實做到了同樣的事情,上面的SQL查詢。

+0

和你想要的有什麼不同?或者它是一個測驗問題? –

+0

它取決於我嘗試使用哪個版本......通常它會在'UserRoles'表中創建額外的列。簡單地說,我無法將'UserRoles''用戶名'映射到'User''用戶名'。 –

回答

0

Java中的關係是指利用對方的對象類型,而不是堆砌在那裏一個字符串,所以您需要修改UserRole

@OneToOne 
@JoinColumn(name="username") 
private User user; 

,而不是場「username」。

爲什麼你有額外的字段(emailbirthDateprofession)在User沒有出現在陳述表我不知道的負荷......他們顯然不符。

+0

感謝您的回答。現在看起來它的確如此,但由於某種原因,我的Spring安全性仍然不接受它。 (並且在我使用查詢創建表時它確實接受)。 Java類中的其他數據......只是忽略了這一點。 –