JPQL查询 - java.lang.String无法强制转换为model.xxx

时间:2017-05-09 08:55:07

标签: java sql jpa jpql

实际错误

java.lang.ClassCastException: java.lang.String cannot be cast to model.Persone

-

大家好,我是JPQL的新手,我正试图写一个非常简单的JPQL查询而没有运气。

我有一个名为persone的数据库表,其中包含一个String nome列。

我要翻译的查询是SELECT Nome FROM persone

-

这是实体

@Entity
public class Persone implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id_persona")
    private int idPersona;

    private String cognome;

    private Timestamp data_nascita;

    @Column(name="nome")
    private String nome;
}

-

这是查询执行方法的片段。我试图修改它将return(和其他所有内容)设置为String而不是List,但是我无法设法获得正确的方法而不是getResultList()。

public static List<Persone> selectAllPersone(){
    Query selectAll = em.createQuery("SELECT p FROM Persone p");
    @SuppressWarnings("unchecked")
    List<Persone> list = selectAll.getResultList();
    return list;
}

-

这是我在编码时失败了

Query selectAll = em.createQuery("SELECT p.nome FROM Persone p");

这个错误可能是什么原因?

3 个答案:

答案 0 :(得分:2)

您正在选择一个字符串名称(p.nome),因此您将获得一个字符串。

如果您想要退回整个人,请选择整个人(SELECT p FROM Personne p)。

答案 1 :(得分:1)

    Query selectAll = em.createQuery("SELECT p.nome FROM Persone p");

代码显示您只从查询中选择字符串而不是所有人物对象 以下查询将返回人物对象

Query selectAll = em.createQuery("SELECT p FROM Persone p");
  List<Persone> list = selectAll.getResultList();

如果您只想从person中选择名称。名称是字符串类型,它将返回List<String>

Query selectAll = em.createQuery("SELECT p.nome FROM Persone p");
List<String> result = selectAll.getResultList();

答案 2 :(得分:0)

我设法解决它并让它适合我。 我刚刚创建了一个返回<Schema Namespace="MyAppModel.Store" Provider="Npgsql" ProviderManifestToken="9.6.2" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl"> 的新方法,它很顺利。

List<String>

谢谢你们的帮助:)