Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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 JPA实体类中用于定义列的数据类型是否影响DAO中查询的创建?_Java_Jpa_Jpql - Fatal编程技术网

Java JPA实体类中用于定义列的数据类型是否影响DAO中查询的创建?

Java JPA实体类中用于定义列的数据类型是否影响DAO中查询的创建?,java,jpa,jpql,Java,Jpa,Jpql,在java实体类中,我为列定义了命名查询和数据类型。我在DAO类中执行了查询,但出现错误:java.lang.IllegalArgumentException:为TypedQuery[TestEntity]指定的类型与查询返回类型[class java.util.Date]不兼容。。我没有使用java.util.Date类来定义mydate列,而是使用了java.sql.Timestamp,因此不清楚错误为什么指向java.util.Date。看起来我做错了什么,但不清楚是什么 @Entity

在java实体类中,我为列定义了命名查询和数据类型。我在DAO类中执行了查询,但出现错误:
java.lang.IllegalArgumentException:为TypedQuery[TestEntity]指定的类型与查询返回类型[class java.util.Date]不兼容。
。我没有使用java.util.Date类来定义mydate列,而是使用了java.sql.Timestamp,因此不清楚错误为什么指向java.util.Date。看起来我做错了什么,但不清楚是什么

@Entity
@Table(name = "SAMPLE", schema = "MYSCHEMA")
@NamedQuery(name = "findByTestId", query = "select u.mydate from TestEntity u where u.my_id = :testId")

public class TestEntity {


    @Id
    @Column(name = "MY_ID")
    private String my_id;

    @Column(name = "mydate")
    private java.sql.Timestamp mydate;
道课

public classTest Dao extends BaseDao

  public List<TestEntity> findByTestId(String id) {
            return execute("punit", entityManager -> {
                TypedQuery<TestEntity> query = entityManager.createNamedQuery("findByTestId", TestEntity.class);
                query.setParameter("testId", id);
                return query.getResultList();
            });
        }
公共类测试Dao扩展了BaseDao
公共列表findByTestId(字符串id){
返回执行(“punit”,entityManager->{
TypedQuery query=entityManager.createNamedQuery(“findByTestId”,TestEntity.class);
query.setParameter(“testId”,id);
返回query.getResultList();
});
}

请您尝试下面的代码,它会工作的

   @Column(name = "mydate")
    private Date mydate;
查询返回类型需要与要在其中强制转换它的实体对象兼容。更新你的代码

TypedQuery<Date>date= entityManager.createNamedQuery("findByTestId", Date.class);
TypedQuerydate=entityManager.createNamedQuery(“findByTestId”,Date.class);
此方法的返回类型应类似于
列表

这将对您有所帮助。

请您尝试下面的代码,它将起作用

   @Column(name = "mydate")
    private Date mydate;
查询返回类型需要与要在其中强制转换它的实体对象兼容。更新你的代码

TypedQuery<Date>date= entityManager.createNamedQuery("findByTestId", Date.class);
TypedQuerydate=entityManager.createNamedQuery(“findByTestId”,Date.class);
此方法的返回类型应类似于
列表

这将帮助您。

基于您的代码。您应该将查询更改为

@NamedQuery(name = "findByTestId", query = "select u from TestEntity u where u.my_id = :testId")

如果只想获取日期,则必须根据代码编辑方法。

。您应该将查询更改为

@NamedQuery(name = "findByTestId", query = "select u from TestEntity u where u.my_id = :testId")

如果您只想获取日期,则必须编辑您的方法。

您的查询应该返回java.util.Timestamp对象列表,因为您在选择列表中只包含了“mydate”字段,但在findByTestId方法中创建类型化查询时,您指示JPA返回TestEntity对象列表。解决此问题的最简单方法是如下更改查询:

"select u from TestEntity u where u.my_id = :testId"

此外,java.sql.Timestamp是java.util.Date的子类,这可能解释了错误引用java.util.Date的原因。

您的查询应该返回java.util.Timestamp对象的列表,因为您在选择列表中只包含了“mydate”字段,但是在findByTestId方法中创建类型化查询时,您指示JPA返回TestEntity对象列表。解决此问题的最简单方法是如下更改查询:

"select u from TestEntity u where u.my_id = :testId"

此外,java.sql.Timestamp是java.util.Date的一个子类,这可能解释了错误引用java.util.Date的原因。

命名查询的用法很奇怪。您只选择日期字段,但在DAO的代码段中,您将返回TestEntity。ORM现在不知道如何将列mydate映射到类型TestEntity。引发强制转换异常的原因可能是java.sql.Timestamp enherits from java.util.date您对命名查询的使用很奇怪。您只选择日期字段,但在DAO的代码段中,您将返回TestEntity。ORM现在不知道如何将列mydate映射到类型TestEntity。可能是由于java.util.date中的java.sql.Timestamp enherits导致了强制转换异常,这将如何解决该问题?在命名查询中选择java.sql.Timestamp时,ORM映射程序被要求返回TestEntity。@GerbenJongerius
查询返回类型需要与要在其中强制转换它的实体对象兼容。
我已更新了答案。这将如何解决问题?在命名查询中选择java.sql.Timestamp时,ORM映射程序被要求返回TestEntity。@GerbenJongerius
查询返回类型需要与要在其中强制转换它的实体对象兼容。
我已更新了答案。