java—jpa实体类中用于定义列的数据类型是否影响dao中查询的创建?

0lvr5msh  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(281)

在java实体类中,我为列定义了命名查询和数据类型。我在dao类中执行了查询,但出现错误: java.lang.IllegalArgumentException: Type specified for TypedQuery [TestEntity] is incompatible with query return type [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();
            });
        }
lvmkulzt

lvmkulzt1#

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

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

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

ltskdhd1

ltskdhd12#

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

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

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

6bc51xsx

6bc51xsx3#

请你尝试一下下面的代码,它会工作。

@Column(name = "mydate")
    private Date mydate;

查询返回类型需要与要在其中强制转换它的实体对象兼容。更新您的代码

TypedQuery<Date>date= entityManager.createNamedQuery("findByTestId", Date.class);

这个方法的返回类型应该是 List<Date> . 这对你有帮助。

相关问题