Java 使用concat()时返回字节数组而不是字符串的JPA本机查询
我正在使用Play框架、JPA和MySQL,但我在SQL查询中遇到了一些关于Concat函数的问题。当我在MySQL GUI中使用它时,它会输出连接列的正确值,但当我在代码中与JPA一起使用它时,它会返回byte[],即字节数组 我的实体: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
@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";