JPA将Java Double映射到SQL Number列 [英] JPA mapping a Java Double to a SQL Number column

查看:323
本文介绍了JPA将Java Double映射到SQL Number列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于无法更改的表,我具有以下SQL定义

I have the following SQL definition for a table which i can't change

CREATE TABLE network_model_property (
    id                NUMBER           NOT NULL PRIMARY KEY,
    name              VARCHAR2(100)    NOT NULL,
    ....        
    max               NUMBER(10),
    min               NUMBER(10),
    ....
)

JPA的类定义如下

@Entity
@Table(name = "network_model_property")
@SequenceGenerator(name = "PropertySeq", sequenceName = "MODEL_PROPERTY_SEQUENCE")
public class ModelProperty implements Serializable {

    static final long serialVersionUID = -3276944825572313129L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PropertySeq")
    @Column(name = "id")
    private Long id;

    @Column(name = "max")
    private Double max;

    @Column(name = "min")
    private Double min;


    public Double getMax() {
        return max;
    }

    public void setMax(Double max) {
        this.max = max;
    }

    public Double getMin() {
        return min;
    }

    public void setMin(Double min) {
        this.min = min;
    }

我正在运行一个简单的测试用例,当设置了'hibernate.hbm2ddl.auto = validate'时抛出此异常

I'm running a simple test case which throws this exception when 'hibernate.hbm2ddl.auto=validate' is set

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: assure] Unable to build EntityManagerFactory
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:132)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:224)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:291)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
    ... 33 more
Caused by: org.hibernate.HibernateException: Wrong column type in POCOWN1.NETWORK_MODEL_PROPERTY for column max. Found: number, expected: double precision
    at org.hibernate.mapping.Table.validateColumns(Table.java:284)
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1116)
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:349)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
    ... 38 more

我已经尝试过

@Column(name = "max", columnDefinition="Decimal(10,2) default '100.00'")

@Column(name = "max",precision=10, scale=2)

推荐答案

在表定义中,max和min列指定了精度,但没有小数位数.尝试在您的Column JPA定义上使用scale = 0,以获取最大&最小属性.

In your table definition, the max and min columns have a precision specified, but no scale. Try using scale = 0 on your Column JPA definition for the max & min properties.

这篇关于JPA将Java Double映射到SQL Number列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆