folgende JPA Entity Gegeben:Eclipse Auto erzeugt Integer statt Dezimal für H2 Datenbank
@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;
Das Schema Generation erzeugt die Anweisung erstellen folgende:
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))
Also das Preisfeld sieht wie folgt aus: PRICE NUMERIC(38) NOT NULL
Warum erstellt EclipseLink
einen nicht-dezimalen numerischen Wert?
Sobald ich @Column(precision = 8, scale = 2)
in das Feld price
hinzufügen, funktioniert es wie erwartet und erstellt PRICE NUMERIC(8,2) NOT NULL
.
Sind die Attribute und scale
auf BigDecimal
Spalten erforderlich, wenn automatisch ein Schema generiert wird?
H2 schafft was es vom JPA-Anbieter zu schaffen ist. Wundern Sie sich, welchen Sie verwenden – DN1
Vielen Dank für den Hinweis. Der Anbieter wurde der Frage hinzugefügt. Es ist 'EclipseLink' –
Standardmäßig konfiguriert der EclipseLink-Persistenzanbieter automatisch eine grundlegende Zuordnung für einfache Typen. Wenn Sie Annotationen wie: '@ Column',' @ Basic' usw. verwenden, können Sie Ihre Mappings feineinstellen. – newOne