使用带有Java 1.8 Time API的JPA 2.1转换器在Eclipse中引用JPA-Error"左右表达式类型必须是相同的类型"

时间:2017-03-28 07:30:29

标签: eclipse java-8 converter jpql jpa-2.1

我正在使用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。

0 个答案:

没有答案