当前位置: 首页 > 知识库问答 >
问题:

覆盖@Column属性值

池兴邦
2023-03-14

我有几个POJO,这将有一个货币数额。我的想法是创建一个通用对象MonetaryAmount(由货币和值组成),然后每当我想在我的POJOs中表示一个货币金额时,就会使用它:

public class MonetaryAmount {
    private String currency;
    private BigDecimal value;
}

public class Account {

    @Column(name = "ACCOUNT_NAME")
    private String name;

    private MonetaryAmount balance; // TODO set column annotation values of currency and value

}

由于MonetaryAmount将在多个POJO中使用,我无法用@Column注释currencyvalue属性,因为在所有情况下,列名并不总是相同的。有没有办法注释MonetaryAmount属性(如上例中的balance)以提供货币属性的列名,以便jOOQ在映射/取消映射POJO时理解它们,类似于Hibernate解释@AttributeOverride请问?

共有2个答案

武卓
2023-03-14

假设Hibernate:您可以使用嵌入式组件。

@Entity
public class Account implements Serializable{

    @Column(name = "ACCOUNT_NAME")
    private String name;

    @Embedded
    @AttributeOverrides( {
       @AttributeOverride(name="currency", column = @Column(name="CURRENCY") ),
       @AttributeOverride(name="value", column = @Column(name="VALUE") )
    } ) private MonetaryAmount balance;

}

@Embeddable
public class MonetaryAmount implements Serializable{
    private String currency;
    private BigDecimal value;
}

虽然这应该是可行的,但我认为在您的案例中,您应该尝试继承,并且仍然使用相同的方法以面向对象的方式重写属性。

轩辕瑞
2023-03-14

目前,jOOQ的DefaultRecordMapper还不支持@嵌入式注释(jOOQ 3.11)。相关的功能要求是:

  • https://github.com/jOOQ/jOOQ/issues/2360
  • https://github.com/jOOQ/jOOQ/issues/2530
  • https://github.com/jOOQ/jOOQ/issues/6518

如果您没有在POJO上使用JPA注释,那么您现在可以做的是在查询中使用以下混淆现象表示法:

ctx.select(
        ACCOUNT.ACCOUNT_NAME.as("name"),
        ACCOUNT.CURRENCY.as("balance.currency"),
        ACCOUNT.VALUE.as("balance.value"))
   .from(ACCOUNT)
   .fetchInto(Account.class);

功能记录在DefaultRecordMapper中,请参阅:

如果是场。getName()是我的_字段。MY_嵌套_字段(区分大小写!),然后,该字段的值将被视为嵌套值MY_nested_字段,该字段设置在传递给所有这些字段的嵌套POJO上(无论可见性如何):

  • 单参数实例方法MY_字段(…)
 类似资料:
  • 返回或设置一个 String 类型,表示邮件合并数据源中用于筛选的域名。可读写。 expression.Column expression 必需。该表达式返回“应用于”列表中的对象之一。 示例 本示例更改已有筛选,从邮件合并中删除所有 Region 域不等于 "WA" 的记录。 Sub SetQueryCriterion() Dim appOffice As Office.OfficeDa

  • 我的测试属性将被放置在生产属性中的属性覆盖。当时,我两人都给起了名字,但它不起作用,所以我就像这篇文章中说的那样,改成了并使用profile。现在看起来就像贝娄(kotlin): 在中,我只将此属性设置为,而在中,则设置为。 这个测试失败了。完整示例可在github上找到 Thx提前。

  • 问题内容: 我注意到编译器不会让我用另一个存储的值覆盖存储的属性(这似乎很奇怪): 但是,我可以使用计算属性来执行此操作: 为什么不允许我再给它一个值? 为什么用存储的属性覆盖是可憎的,而要使用计算的一个犹太洁食呢?他们在想什么呢? 问题答案: 为什么不允许我再给它另一个值? 绝对可以为继承的属性赋予不同的值。如果您在采用该初始值的构造函数中初始化属性,然后传递与派生类不同的值,则可以执行此操作:

  • 我们在 field 对应的 Tag 中对 Column 的一些属性进行定义,定义的方法基本和我们写SQL定义表结构类似,比如: type User struct { Id int64 Name string `xorm:"varchar(25) notnull unique 'usr_name' comment('姓名')"` } 对于不同的数据库系统,数据类型其实

  • 问题内容: 我有一堂课,有以下领域。这些属性用于在需要调用外部rest API方法时序列化为json对象。 在属性名称中,外部API服务调用需要一些类似json归档名称格式的内容。 就我而言,这可以根据诸如test,dev和prod之类的环境进行更改。因此,我正在寻找一种将listId值移动到app.config中的方法。 我尝试按照以下方式进行操作,但不允许这样做。如果分配常数值,它将起作用。

  • 各位, 在Ant(Jenkins)中构建我们的Android应用程序时,我们遇到了一个属性范围问题。这打破了我们的emma单元测试覆盖率。 我们使用全局构建。xml文件,包含以下行: 如您所见,它在单个项目中启动目标。我们使用构建。 在构建过程中,我打印emma的值。已启用,由emma目标设置为true。然而,当Ant达到调试目标时,emma。已启用的不再设置。这导致我们的测试在没有启用emma覆