我在和spring MVC``Spring security hibernate一起工作
我在数据库中创建了两个表,这是模式:
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)
);我正在开发一个用于用户管理的compte应用程序,管理员添加用户信息并提交(第一个表单中的数据插入到user数据库中),然后在另一个jsp中添加该用户的身份验证数据并提交(这里的数据插入到第二个数据库jsp中)
jsp页面中插入user表的表单在没有连接到任何其他表的情况下是正确的,但是当我尝试在应用程序中使用hibernate注释并连接user和compte这两个表时,我遇到了错误:
Caused by: org.hibernate.AnnotationException: Unknown mappedBy in: com.package.domain.User.compte, referenced property unknown: com.package.domain.Compte.Useruser.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 setterscompte.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数据插入到第二个表中?它将如何识别登录和密码是否与刚插入的用户id相对应。
PS :我在数据库中创建了两个表,以便在spring security中使用第二个表进行身份验证。如果我的数据库设计不正确,请告诉我:)
发布于 2016-04-22 22:07:36
首先,您不需要在mappedBy中指定类名(User),而需要指定属性名(user
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private Compte compte;在我看来,通过一个额外的外键将Compte与User关联起来会更好,我希望在User表中包含login和password。
@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;
}https://stackoverflow.com/questions/36795739
复制相似问题