gpt4 book ai didi

java - Hibernate 映射 - 是否可以去掉一个 Java 类?

转载 作者:行者123 更新时间:2023-11-30 07:17:50 24 4
gpt4 key购买 nike

目前我有两个表 - 产品统计。和两个 java 实体(产品、统计)
它们之间的映射关系是1:1。

我想删除一个实体(统计),因为在这个实体中我只需要一列名为“magicValue”的列。

有没有办法只使用一个包含 magicValue 的实体 - Product
(不需要统计课?)

我正在考虑 OneToOne 映射或嵌入式类型使用,但对于所有这些可能性,需要统计 java 类

如果我的问题不合理,请写信给我根据您所知最好的解决方案。

更多详细信息:

从表产品中,我需要所有列。
在表统计信息中,我只需要一列 (MAGIC_VALUE)

SQL 表:

        CREATE TABLE PRODUCT
(
"PRODUCT_ID" NUMBER(20,0),
"NAME" VARCHAR2(30 BYTE),
PRIMARY KEY (`PRODUCT_ID`)
);


CREATE TABLE STATISTICS
(
"STATISTICS_ID" NUMBER(20,0) PRIMARY KEY,
"PRODUCT_ID_FK" NUMBER(20,0),
"MAGIC_VALUE" VARCHAR2(30 BYTE),
"OTHER_USELESS_COLUMN" VARCHAR2(30 BYTE),
...

PRIMARY KEY (`STATISTICS_ID`)
FOREIGN KEY (`PRODUCT_ID_FK`) REFERENCES PRODUCT(PRODUCT_ID)
);

当前的 java 类如下所示:

    @Entity
@Table(name="PRODUCT")
class Product {
@Id
@Column(name = "PRODUCT_ID")
protected Integer productId;

@Column(name = "NAME")
protected String name;

@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
protected Statistics stat;
}

这是统计java类
我只需要一列 (magicValue)

        @Entity
@Table(name="STATISTICS")
class Statistics {
@Id
@Column(name = "STATISTICS_ID")
protected Integer statisticsId;

@OneToOne(mappedBy = "statistics")
protected Product product;

@Column(name = "MAGIC_VALUE")
protected String magicValue; // <-- only this is needed

@Column(name = "OTHER_USELESS_COLUMN")
protected String uselessColumn;
...
}

所需的解决方案

  1. 没有 SQL 更改
  2. 摆脱Statistics java类(如果可能)
  3. 仅更改产品 java 类,例如:

    @Entity
    @Table(name="PRODUCT")
    class Product {
    @Id
    @Column(name = "PRODUCT_ID")
    protected Integer productId;

    @Column(name = "NAME")
    protected String name;

    @someHowMap to sql table Statistics, but in Product have direct magicValue value
    protected String magicValue;
    }


其他(次要)信息:

  • 与数据库的连接是只读的。
  • 我仅使用注释(没有 cfg 文件)
  • 我没有更改 SQL 架构的权限
  • 使用 Java 8 或 Scala 2.10、Hibernate 5.2



谢谢

最佳答案

@Entity
@Table(name="PRODUCT")
class Product {
@Id
@Column(name = "PRODUCT_ID")
protected Integer productId;

@Column(name = "NAME")
protected String name;

@Formula("(select MAGIC_VALUE from STATISTICS where PRODUCT_ID_FK = PRODUCT_ID)")
protected String magicValue;
}

该公式可以工作,它使用 SQL 而不是 HQL,因此 Java 类中不需要 STATISTICS 实体。

You can see more details about the usage of @Formula here

关于java - Hibernate 映射 - 是否可以去掉一个 Java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38081560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com