【发布时间】:2018-05-09 03:21:42
【问题描述】:
给定以下 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。
自动生成架构时是否需要 BigDecimal 列上的 precision 和 scale 属性?
【问题讨论】:
-
H2 创建 JPA 提供者要求创建的内容。想知道你使用的是哪一个
-
感谢您的提示。将提供者添加到问题中。这是
EclipseLink -
默认情况下,EclipseLink 持久性提供程序会自动为简单类型配置基本映射。如果您使用如下注解:
@Column、@Basic等,您可以微调您的映射。
标签: database jpa jakarta-ee eclipselink h2