JPA

2012-04-05 7 views
2

私は私が変更することはできませんテーブルに対して次のSQL定義を持っているJPA

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

JPA'edクラス定義は

@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 =検証」が

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 

設定されているこの例外をスローする簡単なテストケースを実行していると私はトライをしましたDあなたのテーブル定義で

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

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

maxとminプロパティを間違った型にマップします。 – LuckyLuke

+0

クラスを変更できますか?もしそうなら、 'max'と' min'を 'Long'または' Integer'に変更してください。 – Thomas

+0

いいえ私は浮動小数点型/ダブル型として列の型を保持する必要があります。 – emeraldjava

答えて

2

は、最大と最小の列が指定された精度、ないスケールを持っています。 max &分プロパティの列JPA定義でscale = 0を使用してみてください。

0

はいスケールを指定しないと、数値型に変換されます。そのため、スケールと精度を指定する方が常に優れています。 クラスをモデル化するときはいつでもスケールと精度を指定します。スケールが0の場合でも0と指定します。 乾杯!

1

非常に長い時間でしたが、完全性のために、JPAエンティティを定義した最小値と最大値をjava.math.BigDecimalに変更するのが最も簡単な修正方法です。 java.math.BigIntegerおよびjava.math.BigDecimalタイプは、SQL NumericおよびNumberデータ型の直接変換を提供します。

それ以外の場合は、値を正しくマップするには、Javaでjdbcの型を変換するかどうかを判断するために、JDBCのネイティブ型変換用のDBドライバを参照する必要があります。

0

私の場合、データベースは私の定義とうまくいっていますが、検証だけが失敗しました。あなたは "auto = none"を使うことができます。