【问题标题】:Query execution problem using Spring and HIbernate together with FLEX使用 Spring 和 HIbernate 以及 FLEX 的查询执行问题
【发布时间】:2010-11-05 15:17:00
【问题描述】:

所以我将使用带有 Spring 和 Hibernate 的 Flex 4。 一切都已配置并正常工作。我知道这一点,因为我可以进行简单的查询,例如列出表中的所有值。 问题是当我尝试执行“选择”查询时,我会像以前一样获得所有值,而不是通过选择查询获得特定属性。

我是一个初学者,所以请忽略我缺乏更多技术上合理的词..但我不使用它们,因为我不想错误引用。

以下是一些可以让您更好地理解事物的代码: 这是用于存储来自 MySQL 数据库的数据的类--

package flex;


import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;



@Entity
@Table(name="intrial1")
public class intrial1 implements Serializable {

    @Id @GeneratedValue
    @Column( name = "id")
    private int id;
    @Column( name = "name")
    private String name;



    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    }

这是 sessionFactory 做事的类(导入语句太多,只是为了让事情工作-忽略)--

package flex;

import java.util.ArrayList;
import java.util.List;


import javax.persistence.Query;
import org.hibernate.SessionFactory;
import org.hibernate.annotations.NamedNativeQueries;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.flex.remoting.RemotingDestination;
import org.springframework.flex.remoting.RemotingInclude;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;



import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import org.springframework.transaction.annotation.Transactional;




@Repository
@RemotingDestination
public class SpringBean_Service  {


    private SessionFactory sessionFactory;

    @Autowired
    public void setSessionFactory(SessionFactory factory) {
        sessionFactory = factory;
    }

    @SuppressWarnings("unchecked")
    @RemotingInclude
    @Transactional
    public List<intrial1> getList() {

        return sessionFactory.getCurrentSession().createQuery("from intrial1 ").list();
    }

    @SuppressWarnings("unchecked")
    @RemotingInclude
    @Transactional
    public List<intrial1> getListAgain() {



        org.hibernate.Query q = sessionFactory.getCurrentSession().createQuery("select id from intrial1 where name='chirayu'");
        List l = q.list();
        return l; 


    }


    @RemotingInclude
    @Transactional
    public void createFriend(String name, int id) {
        intrial1 f = new intrial1();
        f.setName(name);
        f.setId(id);
        sessionFactory.getCurrentSession().save(f);

}
}

在上面的类中,getList() 有效 完美,列出所有值。这 createFriend 用于输入值 id + name,并且工作顺利。这 问题出在 getListAgain() 函数,它给了我一个结果, 想象2列,标题为 'id' 和 'name',但列出 id 值 在两列中(无名称),如你 可以理解,我在找 getListAgain() 函数的结果为 - “1 列的标题为 'id',并且 在名称的任何地方列出 id ='chirayu'"。

请提供帮助,因为我需要清除此问题并继续开发。 谢谢。

问候, 千汤

更新说明:在这里想说一件事,只要我做一个如下的类,它与 intrial1 类相同,但没有名称的返回语句,即没有定义 getName(),我得到了正确的查询结果 -

'从intrial1中选择id name='chirayu''

package flex;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;



@Entity

public class intrial2 {

    @Id @GeneratedValue
    @Column( name = "id")
    private int id;
    @Column( name = "name")
    private String name;




    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }


    public void setName(String name) {
        this.name = name;
    }

    }

这是奇怪的还是应该是这样的。仍在寻找答案。

【问题讨论】:

    标签: apache-flex hibernate spring orm persistence


    【解决方案1】:

    查询

    select id from intrial1 where name='chirayu'
    

    不返回 intrial1 实体,因此您应该将返回类型更改为 List 或简单地将您的查询更改为:

    from intrial1 where name='chirayu'
    

    【讨论】:

    • 感谢 Maurizio 的回复,但是将返回类型更改为“列表”,使得无法使用 Blazeds 进行连接,因为它没有数据提供程序(这是使用 intrial1 类的关键)。此外,按照您的建议更改查询仅返回 2 列 - 第一个“id”,第二个“名称”,限制仅列出与 name='chirayu' 匹配的值。我尝试了这两种方法,然后回复了,所以我很确定......如果您或其他任何人可以,请进一步提供帮助。
    • 如果方法 getListAgain 返回一个 List 会改变什么吗?
    • 否则您可以创建一个名为 f.i 的新对象。只有 id 的 intrlialDTO 并尝试以这种方式从休眠中获取:select new intrlialDTO(id) from intrlial where name='chrayu'
    • 再次感谢 Maurizio 的回复,好吧,'List' 与仅使用 'List' 存在相同的问题,即没有 DATASTORE(没有 intrial1 种实体)。至于您的第二个建议,它与我上面更新的内容不同吗,请参阅..我创建了一个新类 intrial2,它仅返回 id...请参阅并进一步帮助。希望其他人也能做出贡献……我有一种感觉,我错过了一些重要的东西。
    猜你喜欢
    • 2023-02-20
    • 2016-02-03
    • 2020-02-21
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多