【问题标题】:Datanucleus changing column names?Datanucleus 更改列名?
【发布时间】:2011-08-23 19:10:34
【问题描述】:

我有两个如下所示的类:

@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 的错误!

非常感谢任何有关使这些 id 工作的帮助。

【问题讨论】:

    标签: orm primary-key jdo datanucleus


    【解决方案1】:

    删除 @Inheritence(strategy=Inheritence.COMPLETE_TABLE) 似乎成功了!

    【讨论】:

    • 因为它是错误的......根据所有文档,COMPLETE_TABLE 仅用于在继承树的根部进行规范
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多