2012-01-27 114 views
5

我正在使用Hibernate並擁有一個名爲「用戶」的持久類。由於這是一個關鍵詞,我打上了不同的名稱@Entity屬性(我所看到的,例如,這個問題: Unable to use table named "user" in postgresql hibernate錯誤:在「用戶」處或附近出現語法錯誤

不過,我還是遇到了麻煩,因爲這個類擴展了另一個,它看起來Hibernate等仍在嘗試使用「用戶」作爲列名和獲得搞砸:

@Entity(name = "XonamiUser") 
public class User extends PropertyContainer { 
    ... 

@MappedSuperclass 
public abstract class PropertyContainer implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    protected long key; 
    /** tags */ 
    @ElementCollection 
    protected Set<String> tags; 

    @ElementCollection 
    protected Set<String> searchList; 
    ... 

我的擴展PropertyContainer其他類似乎很好地工作。

這是一個在冬眠的錯誤?有沒有一些解決這個重構短路的方法?謝謝!

下面是我看到的錯誤(略清理):

WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601 
ERROR org.hibernate.util.JDBCExceptionReporter - Batch entry 0 insert into user_search_list (user, search_list) values ('1', 'bjorn') was aborted. Call getNextException to see the cause. 
WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601 
ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: syntax error at or near "user" 
    Position: 31 
+0

@TJ,我添加了錯誤,導致我相信它仍在使用列名。 – 2012-01-27 16:02:59

回答

1

最後,我將類用戶重構爲XonamiUser。這不是我想要的,但它運行得很好。

1

我有點困惑你指的是一列或表名爲User ...您可以使用@Table - 註釋在JPA實體集的表名:

@Entity 
@Table(name = "XonamiUser") 
public class User extends PropertyContainer { 
+0

我得到「不成功:創建表user_search_list(用戶int8不爲空,search_list varchar(255))... ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - 錯誤:在」用戶「或其附近的語法錯誤 – 2012-01-27 16:14:51

1

Hibernate reference manual具有顯示如何定義用於保存集合中的元素表名的爲例。它恰巧使用一個用戶實體來執行此操作,並將該列定義爲user_id而不是用戶。

這個映射應該OK,你的情況:

@ElementCollection 
@CollectionTable(name = "user_search_list", 
       joinColumns = @JoinColumn(name = "user_id")) 
@Column(name = "search_list") 
protected Set<String> searchList; 
+0

這假定用戶是否是唯一的子類PropertyContainer,不是嗎? – 2012-01-27 16:17:42

+0

編號Hibernate命名連接列「user」,因爲它連接到一個名爲「User」的實體。 – 2012-01-28 09:31:22

+0

但searchList屬於PropertyContainer,所以User和其他類繼承它。如果我告訴hibernate它應該使用名稱user_search_list,那麼它不會嘗試對所有繼承的類使用該名稱嗎? – 2012-01-28 19:34:10

30

user是PostgreSQL中reserved keyword。它只允許作爲quoted identifier

您必須強制Hibernate在此INSERT命令中使用引用的"user"

我不是Hibernate專家,但也許這Hibernate saving User model to Postgres會幫助?

+0

是的,我在原始帖子中鏈接的問題提出了相同的觀點,這就是原因我使用了@Entity(name =「XonamiUser」)註釋 – 2012-01-27 16:38:02

+0

我的錯誤就像ERROR:語法錯誤處於或接近Hibernate覆蓋了Po的實際錯誤stgresql保留字。我花了一段時間才弄明白。 – 2016-02-26 10:06:41

+0

@BjornRoche我認爲這個問題是類似於你的問題..你能幫我在這... http:// stackoverflow。COM /問題/ 42224949 /異常組織,PostgreSQL的-UTIL-psqlexception錯誤,語法錯誤,在有或近似C?noredirect = 1個#comment71610583_42224949 – dhS 2017-02-14 12:01:10

相關問題