使用查询更新对象的 LocalDate 属性。参数值与预期类型 [java.time.LocalDate (n/a)] 不匹配



Vaadin + Spring + MySQL

我尝试更新我的对象的LocalDate属性通过查询java.time.LocalDate属性转换为java.sql.Date

实体:

import java.time.LocalDate;
@Entity
@Table(name = "ENTERPRISES")
public class Enterprise {
int enterpriseId;
String name;
LocalDate expiryDate;
public Enterprise(String name) {
this.name = name;
}

public Enterprise() {
}
@Id
@GeneratedValue
@NotNull
@Column(unique = true)
public int getEnterpriseId() {
return enterpriseId;
}
@Column
public String getName() { return name; }
@Column
public LocalDate getExpiryDate() {
return expiryDate;
}
public void setEnterpriseId(int enterpriseId) {
this.enterpriseId = enterpriseId;
}
public void setName(String name) { this.name = name; }
public void setExpiryDate(LocalDate expiryDate) {
this.expiryDate = expiryDate;
}
}

服务层:


import java.sql.Date;
import java.time.LocalDate;
@Service
public class EnterpriseService {
private static EnterpriseService enterpriseService;
private EnterpriseDao enterpriseDao;
public EnterpriseService(EnterpriseDao enterpriseDao) {
this.enterpriseDao = enterpriseDao;
}
public void updateExpiryDate(int enterpriseId, LocalDate newExpiryDate) {
Date expiryDate = Date.valueOf(newExpiryDate);
enterpriseDao.updateExpiryDate(enterpriseId, expiryDate);
}
}

库层:


import java.sql.Date;
import java.time.LocalDate;
public interface EnterpriseDao extends CrudRepository<Enterprise, Integer> {
@Modifying
@Query("update Enterprise e set e.expiryDate = :expiryDate where e.enterpriseId = :enterpriseId")
void updateExpiryDate(@Param(value = "enterpriseId") int enterpriseId, @Param(value = "expiryDate") Date expiryDate);
}

当我尝试在我的应用程序中调用方法时:

enterpriseService.updateExpiryDate(enterpriseX.getEnterpriseId(), LocalDate.of(2022, 12, 12));

I get exception:

原因:org.springframework.dao.InvalidDataAccessApiUsageException:参数值[2022-12-12]与预期类型不匹配。LocalDate (n/a)];嵌套异常是java.lang.IllegalArgumentException:参数值[2022-12-12]不匹配预期类型[java.time. time]。LocalDate (n/a)]

我尝试将DAO方法中的日期类型更改为LocalDate,但没有成功

由于Enterprise实体上的属性expiryDatejava.time.LocalDate,因此查询中的参数:expiryDate必须是java.time.LocalDate。因此,您应该更改updateExpiryDate()expiryDate参数。

相关内容

最新更新