无法在JPA实体中使用带有MySql

时间:2016-04-01 19:00:14

标签: java mysql spring hibernate jpa

我正在尝试在我的实体中使用LocalDate,这种用法在网络上有很多文档。这就是为什么我感到困惑,它不起作用。

这是我的错误: com.mysql.jdbc.MysqlDataTruncation:数据截断:日期值不正确:' \ xAC \ xED \ x00 \ x05sr \ x00 \ x0Djava.time.Ser \ x95] \ x84 \ xBA \ x1B" H \ xB2 \ X0C \ X00 \ x00xpw \ X07 \ X03 \ X00 \ X00 \ X07 \ XD7 \ X0C \ x03x'

所以,它显然需要一个转换器。我尝试过以下链接:

This one表示将弹簧转换器添加到EntityManager的扫描路径中。我直接尝试了他的例子(得到各种错误)以及使其适应我的代码(下面的代码确实执行):

@Autowired
private void configPersistence(LocalContainerEntityManagerFactoryBean factoryBean) {
    factoryBean.setPackagesToScan(Worker.class.getPackage().toString(),"org.springframework.data.jpa.convert.threeten");
}

但问题仍然存在。

been herehere,都说了类似的话。

简单地添加hibernate-java8依赖关系并不像它建议的那样有效。

   <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-java8</artifactId>
        <version>${hibernate.version}</version>
    </dependency>

我已经完全独立地实例化转换器bean而没有骰子。它必须是别的东西。

更新

如果我真的将C&amp; P命名为Spring代码并将其添加为bean,那么它可以工作!?这不是正确的方法。

@Bean
public AttributeConverter<LocalDate,Date> getConverter() {
    return new LocalDateConverter();
}

@Converter(autoApply = true)
public static class LocalDateConverter implements AttributeConverter<LocalDate, Date> {

    @Override
    public Date convertToDatabaseColumn(LocalDate date) {
        return Jsr310Converters.LocalDateToDateConverter.INSTANCE.convert(date);
    }

    @Override
    public LocalDate convertToEntityAttribute(Date date) {
        return Jsr310Converters.DateToLocalDateConverter.INSTANCE.convert(date);
    }
}

spring-data

的传递依赖关系
+- org.hibernate:hibernate-entitymanager:jar:4.3.11.Final:compile
[INFO] |  |  +- org.hibernate:hibernate-core:jar:4.3.11.Final:compile
[INFO] |  |  +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.5.Final:compile
[INFO] |  |  \- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile

结束更新

这是我的实体:

@Entity
public class Worker {
    private Long id;
    private String givenName;
    private String familyName;
    private LocalDate dob;
    private String nationalId;
    private byte[] photo;

    public Worker() {
        this.id = Math.abs(new Random().nextLong());
    }

    @Id
    @Column(name = "ID")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Basic
    @Column(name = "GivenName")
    public String getGivenName() {
        return givenName;
    }

    public void setGivenName(String givenName) {
        this.givenName = givenName;
    }

    @Basic
    @Column(name = "FamilyName")
    public String getFamilyName() {
        return familyName;
    }

    public void setFamilyName(String familyName) {
        this.familyName = familyName;
    }

    @Basic
    @Column(name = "DOB")
    public LocalDate getDob() {
        return dob;
    }

    public void setDob(LocalDate dob) {
        this.dob = dob;
    }

    @Basic
    @Column(name = "NationalID")
    public String getNationalId() {
        return nationalId;
    }

    public void setNationalId(String nationalId) {
        this.nationalId = nationalId;
    }

    @Basic
    @Column(name = "photo")
    public byte[] getPhoto() {
        return photo;
    }

    public void setPhoto(byte[] photo) {
        this.photo = photo;
    }
}

1 个答案:

答案 0 :(得分:2)

你需要Hibernate 5.0+以及hibernate-java8依赖项才能工作。您可以检查5.0更改日志here,它应该显示添加Java 8支持。还有一些官方博客文章说同样的here

请查看4.3至5.0中的migration guide以获取更多信息。