java - 防止 Cayenne 更新某些列值

标签 java database hibernate orm apache-cayenne

我不想更新辣椒中的某些列值,但我想插入它们。一旦插入行,我将永远不想更新某些列值。我怎样才能在辣椒中做到这一点。如果映射文件中是 hibernate 的,我们可以指定一些内容

<column name="column1" type="string" insert="true" update="false">

如何在辣椒映射文件中指定上述一个。非常感谢对此的任何帮助。

-纳伦德拉

最佳答案

在 Cayenne 中,您无法以声明方式执行此操作(而且我认为这不是一个非常有用的抽象来添加)。但您当然可以通过一些代码来实现同样的目标。覆盖对象 [1] 中的“validateForUpdate”以检查当前事务中给定的列是否未更改:

  public void validateForUpdate(ValidationResult validationResult) {
     super.validateForUpdate(validationResult);

     ObjectStore objectStore = (ObjectStore) getObjectContext().getGraphManager();
     DataRow snapshot = objectStore.getCachedSnapshot(getObjectId());
     if(!snapshot.get("COLUMNNAME").equals(getMyProperty())) {
        validationResult.addFailure(new SimpleValidationFailure(this, "Immutable property modified");
     }
  }

[1] http://cayenne.apache.org/docs/3.1/api/org/apache/cayenne/Validating.html

关于java - 防止 Cayenne 更新某些列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452279/

相关文章:

java - 预期 HibernateException : Found: clob,:varchar2(4000)

java - 通过构造函数进行依赖注入(inject)中的循环依赖

java - 在更改时自动编译 JasperReports

java - Jersey ContextResolver GetContext() 仅调用一次

java - 将 tiff 转换为缓冲图像 (Java)

mysql - 为什么要使用 SELECT FOR UPDATE? (MySQL)

c# - 如何创建搜索框?

mysql - 根据特定值对记录进行排名的 SQL 语句

hibernate - 可嵌入在实体中使用两次的自定义 UserType

java - org.hibernate.QueryParameterException : could not locate named parameter [templateId]