当前位置: 首页 > 面试题库 >

JPA:如何覆盖@Embedded属性的列名

昌乐
2023-03-14
问题内容

Person

@Embeddable
public class Person {
    @Column
    public int code;

    //...
}

Event两次作为两个不同的属性嵌入其中:manageroperator

@Entity
public class Event {
    @Embedded
    @Column(name = "manager_code")
    public Person manager;

    @Embedded
    @Column(name = "operator_code")
    public Person operator;

    //...
}

在使用Persistence生成数据库架构时,应该分别提供两列。而是抛出一个异常:

org.hibernate.MappingException:实体映射中的重复列:事件列:代码

如何覆盖code每个属性的默认列名?


问题答案:

使用@AttributeOverride,这是一个示例

@Embeddable public class Address {
    protected String street;
    protected String city;
    protected String state;
    @Embedded protected Zipcode zipcode;
}

@Embeddable public class Zipcode {
    protected String zip;
    protected String plusFour;
}

@Entity public class Customer {
    @Id protected Integer id;
    protected String name;
    @AttributeOverrides({
        @AttributeOverride(name="state",
                           column=@Column(name="ADDR_STATE")),
        @AttributeOverride(name="zipcode.zip",
                           column=@Column(name="ADDR_ZIP"))
    })
    @Embedded protected Address address;
    ...
}

在您的情况下,它看起来像这样

@Entity
public class Event {
    @Embedded
    @AttributeOverride(name="code", column=@Column(name="manager_code"))
    public Person manager;

    @Embedded
    @AttributeOverride(name="code", column=@Column(name="operator_code"))
    public Person operator;

    //...
}


 类似资料:
  • 我想覆盖我在Quarkus应用程序的配置文件中配置的属性。 我怎样才能做到这一点?

  • 我有几个POJO,这将有一个货币数额。我的想法是创建一个通用对象(由货币和值组成),然后每当我想在我的POJOs中表示一个货币金额时,就会使用它: 由于将在多个POJO中使用,我无法用注释和属性,因为在所有情况下,列名并不总是相同的。有没有办法注释属性(如上例中的)以提供和属性的列名,以便jOOQ在映射/取消映射POJO时理解它们,类似于Hibernate解释请问?

  • 假设我的目标如下: 我也有一个列表: 我想用一些“默认值”覆盖“foo-value”和“baz-value”(列表中出现的键的值)。所以我有: 如果我有一个不同的对象,比方说 我不想添加任何默认值,所以spread运算符不适用于我。

  • 我有一个pom文件,其中某些依赖项的版本号依赖于pom文件设置中指定的项目版本属性。我可以通过命令行覆盖它吗?如果可以,如何操作? 说来话长: 我们目前正在将我们的项目转换为maven,但我们还没有完全实现。有多个模块仍然没有使用maven构建,因此是我们项目中的依赖项(它们通过ant构建到jar中)。发布后,我们希望构建所有这些jar,并包含与父项目相同的版本号。对于发布,执行两个步骤(直到我们

  • 本文向大家介绍如何覆盖Spring Boot项目的默认属性?相关面试题,主要包含被问及如何覆盖Spring Boot项目的默认属性?时的应答技巧和注意事项,需要的朋友参考一下 这可以通过在application.properties文件中指定属性来完成。 例如,在Spring MVC应用程序中,您必须指定后缀和前缀。这可以通过在application.properties文件中输入下面提到的属性来

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