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

映射第三方库中的值对象

仲孙飞文
2023-03-14
问题内容

我有以下实体,我需要通过Hibernate 注释 坚持到关系数据库:

@Entity
@Table(name="fizzes")
public class Fizz {
    @Id @GeneratedValue
    @Column(name="fizz_id")
    private int id;

    @Column(name="fizz_wooz")
    private String wooz;

    // ??? here I am unsure!
    private Buzz buzz;

    // Constructor, getters/setters down here, etc...
}

public class Buzz {
    private int jupiter;

    private String neptune;

    // Constructor, getters/setters down here, etc...
}

问题Buzz是:

  • 希望它成为自己的实体/表。我希望它是映射到fizzes表的“值对象/类型” (通过向其添加列)
  • Buzz 来自第三方图书馆,因此我无法对其进行修改

因此,我要寻找的表格形式的最终结果是:

[fizzes] table
==============
fizz_id, PRIMARY KEY AUTO INCREMENT
fizz_wooz, NVARCHAR(50) NOT NULL
fizz_buzz_jupiter, INT NOT NULL
fizz_buzz_neptune, NVARCHAR(100) NOT NULL

无法修改时,如何让Hibernate进行基于注释的映射Buzz


问题答案:

您要搜索的称为Embeddable

@Entity
public class Fizz {
    ...

    @Embedded
    private Buzz buzz;

}

您可以只为以下内容定义 映射文件Buzz

<entity-mappings version="1.0" xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm    
                        http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
    <embeddable class="...Buzz">
        <attributes>
            <basic name="jupiter"><column name="fizz_buzz_jupiter"/></basic>
            <basic name="neptune"><column name="fizz_buzz_neptune"/></basic>
        </attributes>
    </embeddable>
</entity-mappings>

您可以在您的中包含该映射文件persistence.xml

<persistence-unit>
    <mapping-file>.../orm.xml</mapping-file>
</persistence-unit>

如果您真的想对以下内容使用批注Buzz:您不能为其他类定义批注。那就是注释的含义:它们是 内联的 ,属于它们的类。否则与映射文件相比将没有任何好处。

但是您可以扩展Buzz属性 并将其与 属性访问 一起 使用

@Entity
public class Fizz {
    ...

    @Embedded
    private BuzzExtension buzz;

}

@Embeddable
@Access(AccessType.PROPERTY)
public class BuzzExtension extends Buzz {
    @Column(name="fizz_buzz_jupiter")
    public int getJupiter() {
        return super.getJupiter();
    }

    @Column(name="fizz_buzz_neptune")
    public String getNeptune() {
        return super.getNeptune();
    }

}

唯一的缺点:您不能使用Buzzin的实例Fizz



 类似资料:
  • 下面是Main中的随机客户端列表 第二类:产品(字符串名称、枚举类别、BigDecimal价格) 目标->预期结果:在类Main中,创建类Shopping的实例,其中属性是具有 的映射,并用随机数据//integer-购买了多少产品 null null

  • 我有一个对象,我正试图映射到。现在这个有一个名为的枚举,其中包含一些值。我想使用将它们映射到中的其他枚举值。以下是我到目前为止的代码: 当我尝试编译它时,我得到了错误:

  • 我有两个地图,键为整数,值为双倍。 我想创建第三个按键排序的映射,值将是两个映射的双精度列表。 地图1: Map2: 最终地图: 如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00 我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!

  • 第三方库 ThinkCMF 内置了以下第三方库,如果你项目中需要增加其它第三库,也可以通过 composer自己安装,但以后升级应注意不要覆盖 vendor目录,而是使用 composer update去更新第三方库 "topthink/think-orm": "^2.0", "topthink/think-captcha": "^3.0",

  • 你们要爱惜光阴,用智慧与外人交往。你们的言语要常常带着和气,好像用盐调和,就可知道怎样回答各人。(COLOSSIANS 4:5-6) 第三方库 标准库的内容已经非常多了,前面仅仅列举几个,但是Python给编程者的支持不仅仅在于标准库,它还有不可胜数的第三方库。因此,如果作为一个Pythoner,即使你达到了master的水平,在做某个事情之前最好在网上搜一下是否有标准库或者第三方库替你完成。因为

  • 有时我尝试在EJB-JAR中添加第三方库。到目前为止,在我看来,这是不可能的,但我不确定,为什么不可能。 oracle站点本身显示了EJB-JAR的以下打包:EJB打包,它不像war那样有自己的lib目录。我已经尝试将libary放在根目录中(使用eclipse+JBoss7)。我的第一个问题是,是否可以在EJB-JAR中添加额外的libarie,就像在WAR文件中一样?这让我感到困惑,因为可以将