簡體   English   中英

無法使用休眠創建mysql表

[英]unable to create mysql table using hibernate

嘗試執行創建表查詢,該查詢中的列名帶有“。”似乎每次都會出錯,盡管創建的字符串查詢在MYSQL瀏覽器上工作正常。

Sysout createStmt提供:

Create table `myschema`.`flatTest_data_tbl`(`NAME` longtext,`TASK` longtext,`LO&"CATION` longtext) CHARACTER SET utf8

SQLQuery createQuery = session.createSQLQuery(createStmt);
        createQuery.executeUpdate();
        session.close();

它在executeUpdate上出錯:

java.util.NoSuchElementException
    at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
    at org.hibernate.engine.jdbc.internal.BasicFormatterImpl$FormatProcess.perform(BasicFormatterImpl.java:142)
    at org.hibernate.engine.jdbc.internal.BasicFormatterImpl.format(BasicFormatterImpl.java:91)
    at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:101)
    at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:95)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:180)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:91)
    at org.hibernate.engine.query.spi.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:196)
    at org.hibernate.internal.SessionImpl.executeNativeUpdate(SessionImpl.java:1313)
    at org.hibernate.internal.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:401)

我承認選擇名稱有時可能會讓人感到恐懼,尤其是當這些名稱正在由多種工具處理時。 例如,在某些DBMS中選擇一個作為關鍵字的名稱,但是您的關系映射器不在乎。 然后,由數據庫拋出的錯誤將被映射器包裝和掩蓋,您需要花費數小時才能找出您做錯了什么。

此外,請考慮對字符串進行序列化時的編碼問題。 尤其是在通過網絡發送非ASCII字符或從文件中讀取數據時,很有可能會發現原始輸入字符串與最終從管道彈出的字符串看起來不一樣。

由於這些原因,您的方法嚴重過失。 很高興您的代碼從一開始就被破壞,而不是在生產中被破壞。

但是,為了找到解決方案,該怎么辦:

用下面的列創建第二個表

s_label:VARCHAR(1024),
t_value:LONGTEXT

並從原始表中向該表添加外鍵。 文件中的列名進入s_label,您可以隨意用任何喜歡的字符填充它。

這可能會增加表連接的開銷,但更重要的是:它很干凈:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM