Java 未使用Spring数据将数据持久化到数据库中
我正在使用Spring数据将数据保存到数据库中。我写了一个测试用例。它运行良好,但不会将数据插入数据库 DatabaseTest.javaJava 未使用Spring数据将数据持久化到数据库中,java,spring-mvc,jpa,spring-data-jpa,Java,Spring Mvc,Jpa,Spring Data Jpa,我正在使用Spring数据将数据保存到数据库中。我写了一个测试用例。它运行良好,但不会将数据插入数据库 DatabaseTest.java @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={WebAppConfig.class, PersistenceConfig.class, SecurityConfig.class, PropertyPlaceholderConfig.class}) @WebApp
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={WebAppConfig.class, PersistenceConfig.class,
SecurityConfig.class, PropertyPlaceholderConfig.class})
@WebAppConfiguration
@Transactional
public class DatabaseTest {
@Autowired private UsersRepository usersRepository;
@Autowired private LoginsRepository loginsRepository;
@Test
public void saveOne2One(){
Logins lgn = new Logins();
lgn.setUserName("userName");
lgn.setPasswordHash("dfaskjdfaksjfdalksdf");
Users usr = new Users();
usr.setFirstName("test");
usr.setLastName("last");
usr.setUserName("userName");
usr.setLogins(lgn);
lgn.setUsers(usr);
loginsRepository.save(lgn);
//usersRepository.save(usr);
loginsRepository.flush();
}
}
@Entity
@Table(name = "users", schema = "abcd")
public class Users implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 5074527544635474973L;
private Long userId;
private String firstName;
private String lastName;
private String userName;
private Logins logins;
public Users() {
}
public Users(Long userId) {
this.userId = userId;
}
public Users(Long userId, String firstName, String lastName,
String userName, Logins logins) {
this.userId = userId;
this.firstName = firstName;
this.lastName = lastName;
this.userName = userName;
this.logins = logins;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id", nullable = false)
public Long getUserId() {
return this.userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
@Column(name = "first_name")
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name = "last_name")
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Column(name = "user_name")
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
@Entity
@Table(name = "logins", schema = "abcd")
public class Logins implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 3093763378845870599L;
private Long loginId;
private Users users;
private String userName;
//private String passwordSalt;
private String passwordHash;
public Logins() {
}
public Logins(Long loginId) {
this.loginId = loginId;
}
public Logins(Long loginId, Users users, String userName,
String passwordHash) {
this.loginId = loginId;
this.users = users;
this.userName = userName;
//this.passwordSalt = passwordSalt;
this.passwordHash = passwordHash;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "login_id", nullable = false)
public Long getLoginId() {
return this.loginId;
}
public void setLoginId(Long loginId) {
this.loginId = loginId;
}
@OneToOne(fetch = FetchType.LAZY, optional=false, cascade=CascadeType.ALL)
@JoinColumn(name = "related_user_id")
public Users getUsers() {
return this.users;
}
public void setUsers(Users users) {
this.users = users;
}
@Column(name = "user_name")
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Column(name = "password_hash", length=60)
public String getPasswordHash() {
return this.passwordHash;
}
public void setPasswordHash(String passwordHash) {
this.passwordHash = passwordHash;
}
}
Users.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={WebAppConfig.class, PersistenceConfig.class,
SecurityConfig.class, PropertyPlaceholderConfig.class})
@WebAppConfiguration
@Transactional
public class DatabaseTest {
@Autowired private UsersRepository usersRepository;
@Autowired private LoginsRepository loginsRepository;
@Test
public void saveOne2One(){
Logins lgn = new Logins();
lgn.setUserName("userName");
lgn.setPasswordHash("dfaskjdfaksjfdalksdf");
Users usr = new Users();
usr.setFirstName("test");
usr.setLastName("last");
usr.setUserName("userName");
usr.setLogins(lgn);
lgn.setUsers(usr);
loginsRepository.save(lgn);
//usersRepository.save(usr);
loginsRepository.flush();
}
}
@Entity
@Table(name = "users", schema = "abcd")
public class Users implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 5074527544635474973L;
private Long userId;
private String firstName;
private String lastName;
private String userName;
private Logins logins;
public Users() {
}
public Users(Long userId) {
this.userId = userId;
}
public Users(Long userId, String firstName, String lastName,
String userName, Logins logins) {
this.userId = userId;
this.firstName = firstName;
this.lastName = lastName;
this.userName = userName;
this.logins = logins;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id", nullable = false)
public Long getUserId() {
return this.userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
@Column(name = "first_name")
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name = "last_name")
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Column(name = "user_name")
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
@Entity
@Table(name = "logins", schema = "abcd")
public class Logins implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 3093763378845870599L;
private Long loginId;
private Users users;
private String userName;
//private String passwordSalt;
private String passwordHash;
public Logins() {
}
public Logins(Long loginId) {
this.loginId = loginId;
}
public Logins(Long loginId, Users users, String userName,
String passwordHash) {
this.loginId = loginId;
this.users = users;
this.userName = userName;
//this.passwordSalt = passwordSalt;
this.passwordHash = passwordHash;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "login_id", nullable = false)
public Long getLoginId() {
return this.loginId;
}
public void setLoginId(Long loginId) {
this.loginId = loginId;
}
@OneToOne(fetch = FetchType.LAZY, optional=false, cascade=CascadeType.ALL)
@JoinColumn(name = "related_user_id")
public Users getUsers() {
return this.users;
}
public void setUsers(Users users) {
this.users = users;
}
@Column(name = "user_name")
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Column(name = "password_hash", length=60)
public String getPasswordHash() {
return this.passwordHash;
}
public void setPasswordHash(String passwordHash) {
this.passwordHash = passwordHash;
}
}
Logins.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={WebAppConfig.class, PersistenceConfig.class,
SecurityConfig.class, PropertyPlaceholderConfig.class})
@WebAppConfiguration
@Transactional
public class DatabaseTest {
@Autowired private UsersRepository usersRepository;
@Autowired private LoginsRepository loginsRepository;
@Test
public void saveOne2One(){
Logins lgn = new Logins();
lgn.setUserName("userName");
lgn.setPasswordHash("dfaskjdfaksjfdalksdf");
Users usr = new Users();
usr.setFirstName("test");
usr.setLastName("last");
usr.setUserName("userName");
usr.setLogins(lgn);
lgn.setUsers(usr);
loginsRepository.save(lgn);
//usersRepository.save(usr);
loginsRepository.flush();
}
}
@Entity
@Table(name = "users", schema = "abcd")
public class Users implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 5074527544635474973L;
private Long userId;
private String firstName;
private String lastName;
private String userName;
private Logins logins;
public Users() {
}
public Users(Long userId) {
this.userId = userId;
}
public Users(Long userId, String firstName, String lastName,
String userName, Logins logins) {
this.userId = userId;
this.firstName = firstName;
this.lastName = lastName;
this.userName = userName;
this.logins = logins;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id", nullable = false)
public Long getUserId() {
return this.userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
@Column(name = "first_name")
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name = "last_name")
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Column(name = "user_name")
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
@Entity
@Table(name = "logins", schema = "abcd")
public class Logins implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 3093763378845870599L;
private Long loginId;
private Users users;
private String userName;
//private String passwordSalt;
private String passwordHash;
public Logins() {
}
public Logins(Long loginId) {
this.loginId = loginId;
}
public Logins(Long loginId, Users users, String userName,
String passwordHash) {
this.loginId = loginId;
this.users = users;
this.userName = userName;
//this.passwordSalt = passwordSalt;
this.passwordHash = passwordHash;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "login_id", nullable = false)
public Long getLoginId() {
return this.loginId;
}
public void setLoginId(Long loginId) {
this.loginId = loginId;
}
@OneToOne(fetch = FetchType.LAZY, optional=false, cascade=CascadeType.ALL)
@JoinColumn(name = "related_user_id")
public Users getUsers() {
return this.users;
}
public void setUsers(Users users) {
this.users = users;
}
@Column(name = "user_name")
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Column(name = "password_hash", length=60)
public String getPasswordHash() {
return this.passwordHash;
}
public void setPasswordHash(String passwordHash) {
this.passwordHash = passwordHash;
}
}
基础表是这样创建的:
abcd.登录
CREATE TABLE abcd.logins
(
login_id bigint,
user_name text COLLATE "default".pg_catalog,
password_salt text COLLATE "default".pg_catalog,
password_hash text COLLATE "default".pg_catalog,
related_user_id bigint
)
CREATE TABLE abcd.users
(
user_id bigint,
first_name text COLLATE "default".pg_catalog,
last_name text COLLATE "default".pg_catalog,
user_name text COLLATE "default".pg_catalog
)
abcd.用户
CREATE TABLE abcd.logins
(
login_id bigint,
user_name text COLLATE "default".pg_catalog,
password_salt text COLLATE "default".pg_catalog,
password_hash text COLLATE "default".pg_catalog,
related_user_id bigint
)
CREATE TABLE abcd.users
(
user_id bigint,
first_name text COLLATE "default".pg_catalog,
last_name text COLLATE "default".pg_catalog,
user_name text COLLATE "default".pg_catalog
)
我无法找出数据未持久化到数据库中的原因。我甚至调用了存储库的
flush()
方法,但都没有用。有人能帮我吗?如果使用@Transaction执行junit测试,请参见,但默认情况下,框架将为每个测试创建并回滚一个事务
如果您希望提交一个事务—这是不寻常的,但在您希望某个特定测试填充或修改数据库时偶尔有用—可以通过@TransactionConfiguration和@Rollback注释指示TestContext框架使事务提交,而不是回滚
您使用@Transaction执行junit测试,请参见,但默认情况下,框架将为每个测试创建并回滚一个事务 如果您希望提交一个事务—这是不寻常的,但在您希望某个特定测试填充或修改数据库时偶尔有用—可以通过@TransactionConfiguration和@Rollback注释指示TestContext框架使事务提交,而不是回滚 如果不想回滚事务,可以为特定测试添加@Rollback(false)。 在您的情况下,我希望您已经使用
commit
方法提交了事务
就你而言:
@Test
@Rollback(false)
public void saveOne2One(){
Logins lgn = new Logins();
lgn.setUserName("userName");
lgn.setPasswordHash("dfaskjdfaksjfdalksdf");
Users usr = new Users();
usr.setFirstName("test");
usr.setLastName("last");
usr.setUserName("userName");
usr.setLogins(lgn);
lgn.setUsers(usr);
loginsRepository.save(lgn);
//usersRepository.save(usr);
loginsRepository.flush();
}
或者,如果希望在不回滚的情况下为所有测试(类级别)保留数据,则可以使用:
@TransactionConfiguration(defaultRollback=false)
如果不想回滚事务,可以为特定测试添加@Rollback(false)。
在您的情况下,我希望您已经使用commit
方法提交了事务
就你而言:
@Test
@Rollback(false)
public void saveOne2One(){
Logins lgn = new Logins();
lgn.setUserName("userName");
lgn.setPasswordHash("dfaskjdfaksjfdalksdf");
Users usr = new Users();
usr.setFirstName("test");
usr.setLastName("last");
usr.setUserName("userName");
usr.setLogins(lgn);
lgn.setUsers(usr);
loginsRepository.save(lgn);
//usersRepository.save(usr);
loginsRepository.flush();
}
或者,如果希望在不回滚的情况下为所有测试(类级别)保留数据,则可以使用:
@TransactionConfiguration(defaultRollback=false)