2011-08-23 103 views
0

我有一個看起來像這樣的兩個類:Datanucleus更改列名稱?

@PersistenceCapable(detachable="true") 
@Inheritance(strategy=InheritanceStrategy.SUBCLASS_TABLE) 
public abstract class BasicReference implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Persistent(column="last_modified") 
    private Date lastModified; 

    public abstract String getTitle(); 
    public abstract void setTitle(String title); 

    public Date getLastModified() { 
     return lastModified; 
    } 

    public void setLastModified(Date lastModified) { 
     this.lastModified = lastModified; 
    } 
} 


@PersistenceCapable(table="X_MYENTRY",detachable="true") 
@Inheritence(strategy=Inheritence.COMPLETE_TABLE) 
public class MyEntry extends BasicReference { 

    private static final long serialVersionUID = 1L; 

    @Persistent(column="MYENTRY_ID") 
    private Integer id; 

    @Persistent 
    private String title; 

    @Override 
    public String getTitle() { 
     return title; 
    } 

    @Override 
    public void setTitle(String title) { 
     this.title = title; 
    } 

    public Integer getId() { 
     return id; 
    } 

} 

我的數據庫架構是這樣的:

CREATE TABLE X_MYENTRY (
    MYENTRY_ID int identity(1,1), 
    TITLE varchar(64), 
    lastModified datetime 
) 

我有任何數量的這些X_表,每個細微變化,主要是在一些領域允許的長度。

現在,當我從持久性管理器嘗試查詢時,出現無法找到列X_MYENTRY_ID的錯誤。即使我已將列名稱指定爲MYENTRY_ID。

我甚至真的擔心在這一點上@PrimaryKey,我只是希望能夠得到中的對象。

我試圖改變註釋使用各種值。除了MYENTRY_ID之外的任何內容,都會給我一個指定列不存在的錯誤。但是,如果我使用MYENTRY_ID,我得到的X_MYENTRY_ID不存在。

我試圖在數據庫中更改列,只是作爲一個測試,我得到一個不同的錯誤: org.datanucleus.exceptions.NucleusUserException:列「X_MYENTRY_ID」存在於表「X_MYENTRY」,並已無效元數據。現有的列是「

我在SQL Server中的表名爲X_REFERENCE,主鍵是REFERENCE_ID int identity(1,1)。我現在甚至不擔心@PrimaryKey,我只是想能夠讀取數據。但是,當我嘗試通過PersistenceManager查詢時,我在列X_REFERENCE_ID上得到了一個SQL錯誤。如果我將註釋中的列名更改爲其他(「YREFERENCE_ID」),它似乎但是「REFERENCE_ID」似乎被自動替換爲「X_REFERENCE_ID」,如果我將我的測試數據庫中的列重命名爲X_REFERENCE_ID,則會發出REFERENCE_ID找不到的錯誤消息!與獲得這些身份證的工作將不勝感激。

回答

0

刪除@Inheritence(strategy = Inheritence.COMPLETE_TABLE)似乎已經做到了!

+1

因爲它是錯誤的... COMPLETE_TABLE僅用於繼承樹根部的規範,因爲所有文檔 – DataNucleus