Java Hibernate 4条件查询返回空列表
我使用的是Spring4和Hibernate4,但是查询总是返回空列表,即使应该只有几行 这就是模型Java Hibernate 4条件查询返回空列表,java,spring,hibernate,Java,Spring,Hibernate,我使用的是Spring4和Hibernate4,但是查询总是返回空列表,即使应该只有几行 这就是模型 @DynamicUpdate @Table(appliesTo = "comments") public class Comment { @Id @GeneratedValue @Column(name = "id") private int id; @Column(name = "content") private String content;
@DynamicUpdate
@Table(appliesTo = "comments")
public class Comment {
@Id @GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "content")
private String content;
... and some getters and setters ...
这是Spring配置部分
<beans:bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url"
value="jdbc:mysql://mydbroot/circle" />
<beans:property name="username" value="user" />
<beans:property name="password" value="password" />
</beans:bean>
<beans:bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="configLocation" value="classpath:hibernate.cfg.xml" />
</beans:bean>
<tx:annotation-driven />
<beans:bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<beans:property name="sessionFactory" ref="sessionFactory" />
</beans:bean>
<beans:bean id="commentDao"
class="com.hersbitcloud.cancercloud.models.circle.CommentDAO">
<beans:constructor-arg>
<beans:ref bean="sessionFactory" />
</beans:constructor-arg>
</beans:bean>
hibernate.cfg.xml文件
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">true</property>
</session-factory>
org.hibernate.dialogue.mysqldialogue
真的
为刀
public class CommentDAO {
private SessionFactory sessionFactory;
public CommentDAO(SessionFactory sessionFactory){
this.sessionFactory = sessionFactory;
}
@Transactional
public List<Comment> GetComments() {
@SuppressWarnings("unchecked")
List<Comment> listComment = (List<Comment>) sessionFactory.getCurrentSession()
.createCriteria(Comment.class).list();
return listComment;
}
公共类注释{
私人会话工厂会话工厂;
公共评论DAO(SessionFactory SessionFactory){
this.sessionFactory=sessionFactory;
}
@交易的
公共列表GetComments(){
@抑制警告(“未选中”)
List listComment=(List)sessionFactory.getCurrentSession()
.createCriteria(Comment.class).list();
返回列表注释;
}
}
在我的控制器中
@Autowired
private CommentDAO commentDao;
@RequestMapping(value = "/comment", method = RequestMethod.GET) //, produces="application/json")
public int comment() {
List<Comment> listComments = commentDao.GetComments();
return listComments.size();
}
@Autowired
私人评论道评论道;
@RequestMapping(value=“/comment”,method=RequestMethod.GET)/,products=“application/json”)
公共int注释(){
List listComments=commentDao.GetComments();
返回listComments.size();
}
它总是显示listComments.size()
为0
有什么问题吗
我附上数据库的屏幕截图,以显示表名是正确的。
尝试在类中添加这些行
CommentDAO
更改:
private SessionFactory sessionFactory;
致:
我认为
@Transactional
用于对数据库执行修改过程。删除@Transactional
并尝试一下
public List<Comment> GetComments() {
@SuppressWarnings("unchecked")
List<Comment> listComment = (List<Comment>) sessionFactory.getCurrentSession()
.createCriteria(Comment.class).list();
return listComment;
}
public List GetComments(){
@抑制警告(“未选中”)
List listComment=(List)sessionFactory.getCurrentSession()
.createCriteria(Comment.class).list();
返回列表注释;
}
给予@Transactional
以上等级
如果您想执行操作数据库,请给出
@Transactional(readOnly=false)
@RaphaelRoth谢谢您的回复。我通过改变一切来工作
@DynamicUpdate
@Table(appliesTo = "comments")
进入
它们都属于“javax.persistence.*”。是否缺少“@Entity”注释?为什么“@Id”被注释掉了?要么你忘记提交插入行的事务,或者您没有从正确的数据库/架构/表中获取注释。请通过启用show sql to true来启用查询日志,并查看将触发哪些查询db@JBNizet我非常确定这个表是正确的,因为我有另一个使用JDBC的servlet,它工作得很好。“提交插入行的事务”是什么意思?实际上,这些行是在没有事务的情况下使用JDBCservlet插入的。@RaphaelRoth实际上“@Entity”是从Hibernate 4.0+开始被弃用的。我取消了“@id”的注释,但问题仍然存在。@Steven Roo你确定你的数据库连接正常吗?是的,我确定。实际上,如果我更改任何连接信息,就会引发其他异常。我还附上了navicat的屏幕截图。删除“@Transactional”会引发无法获取会话的异常。将“@Transactional”放在类上方并不能解决问题。在服务类上添加@Transactional,我认为您在这里仅使用controller。。在
@Transactional@RequestMapping(value=“/comment”,method=RequestMethod.GET)/,products=“application/json”)public int comment(){List listcoments=commentDao.GetComments();return listcoments.size();}
如果映射文件中有dynamic update=“true”,该怎么办。在我的例子中,我没有使用注释,但是有同样的问题
@DynamicUpdate
@Table(appliesTo = "comments")
@Entity
@Table(name="comments")