2011-08-23 106 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