Java 无法在hibernate中提取结果?
我无法提取hibernate中的结果。。我想在他们登录时检查一个帐户,但它引发了一个异常:无法提取结果 我的示例代码: 我的Pojo:Java 无法在hibernate中提取结果?,java,mysql,hibernate,spring-mvc,Java,Mysql,Hibernate,Spring Mvc,我无法提取hibernate中的结果。。我想在他们登录时检查一个帐户,但它引发了一个异常:无法提取结果 我的示例代码: 我的Pojo: @Entity @Table(name = "account") public class TestAccount implements Serializable { @Id @Column(name="IDACCOUNT") private Integer idAccount; @Column(name="USERNAME"
@Entity
@Table(name = "account")
public class TestAccount implements Serializable {
@Id
@Column(name="IDACCOUNT")
private Integer idAccount;
@Column(name="USERNAME")
private String username;
@Column(name="PASSWORD")
private String password;
@Column(name="ISDELETED")
private Integer isDeleted;
@ManyToOne
@JoinColumn(name="ROLE")
private TestAccountRole accountRole;
@OneToOne(mappedBy="accountInfo", cascade=CascadeType.ALL)
private TestAccountInfo accountInfo;
}
我的刀:
public TestAccount Authenticate(String username, String password) {
String passMD5 = AccountUtil.md5(password);
Session session = sessionFactory.getCurrentSession();
String sql = "from Account where username = ? and password = ?";
Query query = session.createQuery(sql);
query.setString(0, username);
query.setString(1, passMD5);
//query.setInteger(2, 0);
TestAccount account = (TestAccount) query.uniqueResult();
if (account != null) {
return account;
}
return null;
}
我的数据库:
CREATE TABLE `account` (
`IDACCOUNT` int(11) NOT NULL AUTO_INCREMENT,
`USERNAME` varchar(45) DEFAULT NULL,
`PASSWORD` varchar(45) DEFAULT NULL,
`ISDELETED` int(11) DEFAULT NULL,
`ROLE` int(11) DEFAULT NULL,
PRIMARY KEY (`IDACCOUNT`),
KEY `ROLEACCOUNT_idx` (`ROLE`),
CONSTRAINT `ROLEACCOUNT` FOREIGN KEY (`ROLE`) REFERENCES `account_role` (`IDACCOUNT_ROLE`) ON DELETE NO ACTION ON UPDATE NO ACTION
)
CREATE TABLE `account_info` (
`IDACCOUNT_INFO` int(11) NOT NULL AUTO_INCREMENT,
`BIRTHDAY` varchar(45) DEFAULT NULL,
`SEX` varchar(45) DEFAULT NULL,
`ADDRESS` varchar(45) DEFAULT NULL,
`EMAIL` varchar(45) DEFAULT NULL,
`PHONE` varchar(12) DEFAULT NULL,
`ISDELETED` int(11) DEFAULT NULL,
PRIMARY KEY (`IDACCOUNT_INFO`),
CONSTRAINT `ACCOUNTINFO` FOREIGN KEY (`IDACCOUNT_INFO`) REFERENCES `account` (`IDACCOUNT`) ON DELETE NO ACTION ON UPDATE NO ACTION
)
CREATE TABLE `account_role` (
`IDACCOUNT_ROLE` int(11) NOT NULL AUTO_INCREMENT,
`ROLE` varchar(45) DEFAULT NULL,
PRIMARY KEY (`IDACCOUNT_ROLE`)
)
例外
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:61)
org.hibernate.loader.Loader.getResultSet(Loader.java:2040)
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1837)
root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'account0_.IDACCOUNTROLE' in 'field list'
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
java.lang.reflect.Constructor.newInstance(Unknown Source)
com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
com.mysql.jdbc.Util.getInstance(Util.java:386)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
改为
String sql = "from TestAccount where username = ? and password = ?";
TestAccountInfo中的表名不正确。它应该被更正为
@Tablename=帐户信息
查询也需要更改
String sql = "from TestAccount where username = ? and password = ?";
@ThanhDuyNgo what exceptioncom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:field list中的未知列'account0..IDACCOUNTROLE'@ThanhDuyNgo您能给出异常出现的确切行号吗?当我调试时,我尝试执行这一行时,他们会抛出一个异常:TestAccount account=TestAccount query.uniqueResult@ThanhDuyNgo将@Columnname=IDACCOUNT\u角色改为@Columnname=IDACCOUNT\u角色你也要更改查询吗?我已经像你一样更改了查询,但仍然没有更改work@ManyToOne@JoinColumnname=角色私有TestAccountRole accountRole;将联接列名更改为IDACCOUNT\u角色,而不是角色
String sql = "from TestAccount where username = ? and password = ?";
@Entity
@Table(name = "account")
public class TestAccountInfo implements Serializable {
String sql = "from TestAccount where username = ? and password = ?";