2016-04-22 9 views
0

私は、データベース内の2つのテーブル、このスキーマに作成したspring MVC``Spring securityhibernatespringMvcでOnetoOneのhibernateアノテーションを使用する方法は?

で働いている:私は、管理者がユーザーの情報を追加し、ユーザーの経営者のためのWebアプリケーションを開発してい

create table user(
id int(10), 
name VARCHAR(30) NOT NULL, 
address VARCHAR(30) NOT NULL, 
PRIMARY KEY (id) 
); 

create table compte(
id int(10), 
login VARCHAR(30) NOT NULL, 
password VARCHAR(30) NOT NULL, 
PRIMARY KEY (id), 
FOREIGN KEY (id) REFERENCES user(id) 
); 

を(最初のフォームからのデータはuserデータベースに挿入されます)、その後、他のJSPでは、このユーザーの認証データを追加して提出します(compteにデータが挿入されます)

userのテーブルに挿入されるjspページのフォームは、他のテーブルに結合されていないときに正しく実行されます。 しかし、私は自分のアプリケーションでのHibernateのアノテーションを使用して2つのテーブルを結合するためにしようとしたときusercompte I持っているエラー:

Caused by: org.hibernate.AnnotationException: Unknown mappedBy in: com.package.domain.User.compte, referenced property unknown: com.package.domain.Compte.User 

user.java:

@Entity 
@Table(name = "user") 
public class User { 


@Id 
@Column(name="id") 
private int id; 
@Column(name="name") 
private String name; 
@Column(name="address") 
private String address; 

@OneToOne(mappedBy="User", cascade=CascadeType.ALL) 
    private Compte compte; 
//getters and setters 

compte.java:

@Entity 
@Table(name = "COMPTE") 
public class Compte { 

@Id 
@GeneratedValue 
@Column(name = "id") 
private int id; 

@Column(name = "login") 
private String login; 

@Column(name = "password") 
private String password; 


@OneToOne 
@PrimaryKeyJoinColumn 
private User user; 

//getters and setters 

compteデータを2番目のテーブルに挿入する方法を知りませんか?ログインとパスワードが挿入されたばかりのユーザーのIDに対応していることをどのように認識するのでしょうか。

PS:私のデータベース設計が誤っている場合、私はspring securityに認証のための第二を使用するようにデータベースに2つのテーブルを作成しました教えてください:)

答えて

1

を第一に、あなたは(ないUserをクラス名を指定する必要があります私の意見でmappedBy

@OneToOne(mappedBy = "user", cascade = CascadeType.ALL) 
private Compte compte; 

中)が、プロパティ名(user)追加の外部キーによってUserCompteを関連付けるために良くなると私はloginとを持っていると思いますUserテーブル内の。

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

    @Id 
    @GeneratedValue 
    @Column(name = "f_id") 
    private int id; 

    @Column(name = "f_login") 
    private String login; 

    @Column(name = "f_password") 
    private String password; 

    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL) 
    private Compte compte; 

} 

@Entity 
@Table(name = "comptes") 
public class Compte { 

    @Id 
    @GeneratedValue 
    @Column(name = "f_id") 
    private int id; 

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

    @Column(name = "f_name") 
    private String name; 

} 
関連する問題