Java Spring、Hibernate、TestNG和h2:org.dbunit.dataset.NoSuchTableException:用户
我正在尝试测试DAO层。 该项目包括以下技术:Spring4、Hibernate5、MySQL、H2、Mockito、testNG、dbUnit和其他 这里是pom.xml中的依赖项片段:Java Spring、Hibernate、TestNG和h2:org.dbunit.dataset.NoSuchTableException:用户,java,spring,hibernate,testng,h2,Java,Spring,Hibernate,Testng,H2,我正在尝试测试DAO层。 该项目包括以下技术:Spring4、Hibernate5、MySQL、H2、Mockito、testNG、dbUnit和其他 这里是pom.xml中的依赖项片段: 4.2.4.1发布 5.1.0.1最终版本 1.0.0.1决赛 5.1.38 1.10.19 假的 6.9.4 1.3.176 2.2 朱尼特 . dbConn中几乎所有字段都为空 对测试用户DAO进行分类: public class UserDAOTest extends DAOTest { pr
4.2.4.1发布
5.1.0.1最终版本
1.0.0.1决赛
5.1.38
1.10.19
假的
6.9.4
1.3.176
2.2
朱尼特
. dbConn中几乎所有字段都为空
对测试用户DAO进行分类:
public class UserDAOTest extends DAOTest {
private final static Logger log = Logger.getLogger(UserDAOTest.class.getName());
@Autowired
private IUserDAO userDAO;
@Override
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSet(this.getClass().getClassLoader().getResourceAsStream("user.xml"));
}
@Test
public void findById(){
if (userDAO == null) log.info("user dao is null");
else log.info("user dao is: " + userDAO.toString());
UserEntity ue = userDAO.findByPK("ivan@email.com");
log.debug("Find by id: " + ue.toString());
assertNotNull("Don't found user by id", ue);
}
}
以及user.xml的以下内容:
据我所知,该错误引用了该文件中的“user”标记
这里还有用户的POJO:
@Entity
@Table(name = "user", schema = "srtd")
public class UserEntity {
private String email;
private String password;
private PassangerEntity idPassanger;
public UserEntity() {}
public UserEntity(String email, String password, PassangerEntity idPassanger) {
this.email = email;
this.password = password;
this.idPassanger = idPassanger;
}
@Id
@Column(name = "email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Basic
@Column(name = "password")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@OneToOne(optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "idPassanger", unique = true, nullable = false)
public PassangerEntity getIdPassanger(){
return idPassanger;
}
public void setIdPassanger(PassangerEntity idPassanger){
this.idPassanger = idPassanger;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserEntity that = (UserEntity) o;
if (email != null ? !email.equals(that.email) : that.email != null) return false;
if (password != null ? !password.equals(that.password) : that.password != null) return false;
return true;
}
@Override
public int hashCode() {
int result = email != null ? email.hashCode() : 0;
result = 31 * result + (password != null ? password.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "UserEntity{" +
"email='" + email + '\'' +
", password='" + password + '\'' +
", idPassanger=" + idPassanger.toString() +
'}';
}
}
在完整的错误堆栈中,我认为有必要注意以下日志:
Caused by: org.h2.jdbc.JdbcSQLException:
Schema "SRTD" not found; SQL statement:
alter table srtd.user add constraint FKec3wluojmxshecxg06rihvlwf foreign key (idPassanger) references srtd.passanger [90079-176]
如果有必要,那么我将列出一个完整的错误堆栈,事实上它有很大
请帮助我解决这个问题,我已经花了一整天的时间在上面。尝试从实体注释中删除属性schema=“srtd”
,因为dataSource.setUrl(…)
方法已经有了它。我想问题可能是因为敏感的架构名称。你能试试更新后的urljdbc:h2:mem:srtd;DB_CLOSE_DELAY=-1;DB_关闭_上的_退出=错误;IGNORECASE=TRUE
。不确定是否需要schema=“srtd”
在entity
注释中,因为上面的url已经有了注释。是!你是对的。我删除了注释方案实体,它成功了。我真的很感谢你!
public class UserDAOTest extends DAOTest {
private final static Logger log = Logger.getLogger(UserDAOTest.class.getName());
@Autowired
private IUserDAO userDAO;
@Override
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSet(this.getClass().getClassLoader().getResourceAsStream("user.xml"));
}
@Test
public void findById(){
if (userDAO == null) log.info("user dao is null");
else log.info("user dao is: " + userDAO.toString());
UserEntity ue = userDAO.findByPK("ivan@email.com");
log.debug("Find by id: " + ue.toString());
assertNotNull("Don't found user by id", ue);
}
}
@Entity
@Table(name = "user", schema = "srtd")
public class UserEntity {
private String email;
private String password;
private PassangerEntity idPassanger;
public UserEntity() {}
public UserEntity(String email, String password, PassangerEntity idPassanger) {
this.email = email;
this.password = password;
this.idPassanger = idPassanger;
}
@Id
@Column(name = "email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Basic
@Column(name = "password")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@OneToOne(optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "idPassanger", unique = true, nullable = false)
public PassangerEntity getIdPassanger(){
return idPassanger;
}
public void setIdPassanger(PassangerEntity idPassanger){
this.idPassanger = idPassanger;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserEntity that = (UserEntity) o;
if (email != null ? !email.equals(that.email) : that.email != null) return false;
if (password != null ? !password.equals(that.password) : that.password != null) return false;
return true;
}
@Override
public int hashCode() {
int result = email != null ? email.hashCode() : 0;
result = 31 * result + (password != null ? password.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "UserEntity{" +
"email='" + email + '\'' +
", password='" + password + '\'' +
", idPassanger=" + idPassanger.toString() +
'}';
}
}
Caused by: org.h2.jdbc.JdbcSQLException:
Schema "SRTD" not found; SQL statement:
alter table srtd.user add constraint FKec3wluojmxshecxg06rihvlwf foreign key (idPassanger) references srtd.passanger [90079-176]