Java 使用concat()时返回字节数组而不是字符串的JPA本机查询

Java 使用concat()时返回字节数组而不是字符串的JPA本机查询,java,mysql,string,jpa,bytearray,Java,Mysql,String,Jpa,Bytearray,我正在使用Play框架、JPA和MySQL,但我在SQL查询中遇到了一些关于Concat函数的问题。当我在MySQL GUI中使用它时,它会输出连接列的正确值,但当我在代码中与JPA一起使用它时,它会返回byte[],即字节数组 我的实体: @Entity public class NumberData{ @javax.persistence.Id @GeneratedValue(strategy = GenerationType.AUTO) Long Id; @Co

我正在使用Play框架、JPA和MySQL,但我在SQL查询中遇到了一些关于Concat函数的问题。当我在MySQL GUI中使用它时,它会输出连接列的正确值,但当我在代码中与JPA一起使用它时,它会返回byte[],即字节数组

我的实体:

@Entity
public class NumberData{

    @javax.persistence.Id @GeneratedValue(strategy = GenerationType.AUTO)
    Long Id;

    @Column(unique = true)
    private Long numbr;

    @Column(unique = true)
    private String somekey;

}
我的选择查询:

String query="SELECT concat(somekey,id) as uid,numbr from numberdata";
List<Object[]> numList = JPA.em().createNativeQuery(query).getResultList();

我知道我可以使用新的Stringob[0]将其转换为字符串,但既然MySQL GUI给了我正确的结果,这是JPA的问题吗?如何直接从MySQL查询中获取字符串varchar?

我想答案可以在for CONCAT中找到:

返回连接参数后产生的字符串。可能有一个或多个参数。如果所有参数都是非二进制字符串,则结果是非二进制字符串。如果参数包含任何二进制字符串,则结果为二进制字符串

JDBC文档的一部分提示,如果是二进制字符串,CHAR和VARCHAR将转换为byte[]:

除非列的字符集是二进制的,否则返回字节[]

正如上面第一个链接中所建议的,非字符串参数的转换应该可以解决这个问题:

选择CONCATCASTint\u col作为CHAR,CHAR\u col

在您的情况下,它将如下所示:

String query= "SELECT concat(somekey,CAST(id AS CHAR)) as uid,numbr from numberdata";

这怎么会是JPA的问题呢?JPA原生查询只是通过JDBC传递您的查询,因此您依赖于数据存储,并获得JDBC驱动程序提供的内容。。。
String query= "SELECT concat(somekey,CAST(id AS CHAR)) as uid,numbr from numberdata";