Eclipselink Auto为H2数据库生成整数而不是小数



给定以下JPA实体:

@Table(name = "T_BOOK")
@Entity
@NamedQueries({
        @NamedQuery(name = Book.FIND_BY_ISBN_QUERY.QUERY_NAME, query = Book.FIND_BY_ISBN_QUERY.QUERY_STRING)
})
public class Book extends BaseEntity {
    public static class FIND_BY_ISBN_QUERY {
        public static final String QUERY_NAME = "Book.findByISBN";
        public static final String QUERY_STRING = "select new ch.bfh.eadj.dto.BookInfo(b.isbn, b.authors, b.title, b.price) from Book b where b.isbn = :isbn";
    }
    @Column(nullable = false)
    private String isbn;
    private String authors;
    @Column(nullable = false)
    private String title;
    @Column(nullable = false)
    private BigDecimal price;

模式生成创建以下创建语句:

CREATE TABLE T_BOOK (NR BIGINT IDENTITY NOT NULL, AUTHORS VARCHAR, BINDING VARCHAR,ISBN VARCHAR NOT NULL, PRICE NUMERIC(38) NOT NULL, TITLE VARCHAR NOT NULL, VERSION INTEGER, PRIMARY KEY (NR))

所以价格字段看起来像这样:PRICE NUMERIC(38) NOT NULL

为什么EclipseLink创建一个非确定的数字值?

一旦我将@Column(precision = 8, scale = 2)添加到price字段,它就会按预期工作并创建PRICE NUMERIC(8,2) NOT NULL

自动生成架构时,precisionscale属性是否需要BigDecimal列?

原因是,根据JDBC规范bigdecimal映射为数字。未经指定刻度的默认比例为0。

数字(38)(或在诸如Oracle编号(38)之类的数据库中)是数据库中此数据类型的最大值:

38 significant digits in the range of -(10**125) to +(10**125).

最新更新