我正在使用Eclipe IDE Neon.2处理JavaEE 7项目(JPA 2.1和Java 8)。
在我的实体中使用了新的Java 8 Time API,因此我需要使用JPA-AttributeConverter将它们转换为sql-datatypes。在大多数情况下,我想使用带有JPQL的命名查询。
@Entity
@NamedQuery(name = Account.QUERY_FIND_LOGGED_USER_TODAY, query = "SELECT a from Account a where a.lastLoggedInDate == CURRENT_DATE")
public class Account implements Serializable {
private static final long serialVersionUID = 1L;
public final static String QUERY_FIND_LOGGED_USER_TODAY = "account_find_logged_user_today";
@Id
private Integer id;
private String name;
@Convert(converter = LocalDateAttributeConverter.class)
private LocalDate lastLoggedInDate;
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public LocalDate getLastLoggedInDate() {
return this.lastLoggedInDate;
}
public void setLastLoggedInDate(LocalDate lastLoggedInDate) {
this.lastLoggedInDate = lastLoggedInDate;
}
}
AttributeConverter看起来像这样
@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate locDate) {
return (locDate == null ? null : Date.valueOf(locDate));
}
@Override
public LocalDate convertToEntityAttribute(Date sqlDate) {
return (sqlDate == null ? null : sqlDate.toLocalDate());
}
}
Eclipse向我展示了一条错误消息,指向&#34; a.lastLoggedInDate == CURRENT_DATE&#34;说
左右表达式类型必须属于同一类型。
这是真正的 JPA-Error,还是Eclipse-JPA-Validation不支持组合JPA-Converter&amp; JPQL。