jpa SecondaryTable注解在本地工作,但不在测试环境中工作

fdx2calv  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(111)

因此,我们使用的是Java 8(测试环境上的v202,本地版本从230到301),并且我们使用的是spring boot 1.5.4.RELEASE/hib(5.0.12)/jpa 2.1。
我们有这样一个类:

@Entity
@SecondaryTable(name = "FOO_BAR")
@org.hibernate.annotations.Table(appliesTo = "foo_bar", optional = false)
@DiscriminatorValue(MyEnum.Values.MY_DISCRIMINATOR)
public class FooBar extends FooBarParent{

@Column(name = "COLUMN_NAME_OF_PRIMARY_TABLE_FOR_FIELD_A")
private Long FIELD_A;

@Column(table= "FOO_BAR", name = "COLUMN_NAME_OF_SECONDARY_TABLE_FOR_FIELD_B")
private String FIELD_B;

辅助表的脚本为:

CREATE TABLE FOO_BAR
(
    ID                            NUMBER PRIMARY KEY,
    TOTO                          VARCHAR2(10)
);

ALTER TABLE FOO_BAR
    ADD CONSTRAINT FK_FOO_BAR_PARENT FOREIGN KEY (ID) REFERENCES FOO_BAR_PARENT(ID);

整个继承系统运行良好,但是我们最近添加了辅助表注解,它在本地运行:在数据库中添加一个FooBar时,它会在辅助表中添加一行。在读取FooBarParent的另一个子表(我们称之为FooBar2)时,它也在本地工作,它不关心与FooBar有关而与FooBar2无关的辅助表。
它也可以在本地为我的同事工作,也可以在本地与测试环境的数据库一起工作,所以即使数据是相同的,它也可以工作。
但是一旦我们在测试环境中测试(实际上,在所有的测试环境中),代码就不再工作了。它就像一个海森堡错误,因为我们无法调试它...
测试环境中的意外结果是,当你试图读取FooBar2的列表时,它会产生重复项。因此,你将读取与SecondaryTable中的行一样多的FooBar2。这是愚蠢的,因为它甚至不应该在第一时间查找那里,因为它是FooBar的二级表,而不是FooBar2。
我们假设它在做一个左连接或者类似的操作。
添加

@org.hibernate.annotations.Table(appliesTo = "foo_bar", optional = false)

没有帮助。我们还尝试使用其他列名,

@SecondaryTable(name = "FOO_BAR", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "OTHER_COLUMN_NAME_IN_FOO_BAR_ID", referencedColumnName = "ID")})

我们还尝试了不使用同时也是外键的主键,同样的。
结果总是一样的,在本地工作,而不是事后。
所以我们开始考虑可能是hib版本或与hib相关的属性的问题,这些属性可能会从本地更改,或者是jvm的版本...
有人有主意吗?
先谢了

cbwuti44

cbwuti441#

我发现,问题是我们在当地使用了一处房产:
数据库平台= org.hibernate.dialect.Oracle10g方言
在19号甲骨文数据库里。
未在其他环境中使用该属性。

相关问题