Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate 4条件查询返回空列表_Java_Spring_Hibernate - Fatal编程技术网

Java Hibernate 4条件查询返回空列表

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;

我使用的是Spring4和Hibernate4,但是查询总是返回空列表,即使应该只有几行

这就是模型

@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")