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
实体上的属性expiryDate
是java.time.LocalDate
,因此查询中的参数:expiryDate
必须是java.time.LocalDate
。因此,您应该更改updateExpiryDate()
的expiryDate
参数。