2013-07-19 90 views
1

有一個使用SQL DDL腳本創建的表,其中有一個_INT8類型的列。如果我嘗試將它映射到long(它是Postgres INT8),它會拋出堆棧的末尾。如何使用Hibernate將Postgres _INT8映射到Java實體?

Caused by: org.hibernate.HibernateException: Wrong column type in [schme_name].[table_name] for column [column_name]. Found: _int8, expected: int8 
    at org.hibernate.mapping.Table.validateColumns(Table.java:373) 
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1265) 
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:508) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750) 
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:920) 

如果我嘗試將其映射到long[](或任何其他數組類型),而不是Found: _int8, expected: bytea

如何Postgres的_INT8使用Hibernate映射到Java類型?

回答

3

_int8是類型int8[]的內部別名,即長整型數組。

我不知道爲什麼使用下劃線前綴,這很可怕,但它應該只在服務器內部可見,所以我很驚訝你看到它出現在消息中。藉此,例如,當服務器顯示bigint[]在消息列類型:

http://sqlfiddle.com/#!12/61bc5/1

如果你想它在Hibernate中映射,必須將其映射爲long[],如果休眠甚至支持SQL陣列 - which it does not appear to。您可能需要add your own UserType implementation that uses the JDBC support for SQL arraysAnother example on the Hibernate forums。它seems to be a bit of an FAQ,但像Hibernate/JPA中的大多數事情一樣,只要你嘗試使用除最基本的數據庫特性之外的任何東西,就會發現你的頭靠在磚牆上。

相關問題