gpt4 book ai didi

java - 如何创建两个具有相同实体的类?

转载 作者:行者123 更新时间:2023-11-30 05:27:09 25 4
gpt4 key购买 nike

假设我有一个 table person 并且我有一个实体类,其中有很多字段,一些 @Exposed ,一些@Transient,一些@Temporal列。问题是加载 n 个 Person 项需要很长时间,因为每个记录都有一些字段会降低性能。

作为优化的想法,我创建了一个 PersonSimplified 类,定义了 Person 的所有成员,除了“慢速”字段和方法。一切都工作得无可挑剔,但不幸的是,这个解决方案不是很优雅,因为诸如 name 之类的东西被重新定义,并且代码重复会导致灾难。我的想法是确保 Person 扩展 PersonSimplified ,但不知道如何做到这一点。我有三个重要的类,我将在这里给出它们的骨架:

BaseEntity.java

@MappedSuperclass
@EntityListeners({BaseEntityListener.class})
public abstract class BaseEntity implements Cloneable {
//Some fields and methods
}

PersonSimplified.java

@SuppressWarnings("serial")
@Entity(name="PersonSimplified")
@Table(name="person")
@Inheritance(strategy=InheritanceType.JOINED)
public class PersonSimplified extends BaseEntity implements Auditable, Serializable {
//Lots of stuff
}

Person.java

@SuppressWarnings("serial")
@Entity(name="Person")
@Table(name="person")
@Inheritance(strategy=InheritanceType.JOINED)
public class Person extends PersonSimplified implements Auditable, Serializable {
//Some slow stuff
}

我得到的错误是:

外键循环依赖涉及以下表:person、person

但是,我不打算拥有任何外键。我只想重新组织代码,以确保当我需要一个简化的人时,它可用,当我需要它和慢速字段时,我也可以实现这一点,而不必重复我的代码。我怎样才能实现这个目标?

最佳答案

我认为您的问题与@Inheritance有关,请尝试以下操作:

PersonSimplified.java

@SuppressWarnings("serial")
@Entity(name="PersonSimplified")
@Table(name="person")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class PersonSimplified extends BaseEntity implements Auditable, Serializable {
//Lots of stuff
}

Person.java

@SuppressWarnings("serial")
@Entity(name="Person")
@Table(name="person")
public class Person extends PersonSimplified implements Auditable, Serializable {
//Some slow stuff
}

您必须知道,在底层,Hibernate 正在生成一个鉴别器列和 Person 的鉴别器值。

编辑

实际的解决方案是创建一个中间,它扩展 BaseEntity并从中扩展其他两个类:

@MappedSuperclass
@EntityListeners({BaseEntityListener.class})
public abstract class BasePerson extends BaseEntity {
//Everything which was part of PersonSimplified
}

然后我确保扩展这个:

@SuppressWarnings("serial")
@Entity(name="PersonSimplified")
@Table(name="person")
@Inheritance(strategy=InheritanceType.JOINED)
public class PersonSimplified extends BasePerson implements Auditable, Serializable {

public PersonSimplified() {
}

}

@SuppressWarnings("serial")
@Entity(name="Person")
@Table(name="person")
@Inheritance(strategy=InheritanceType.JOINED)
public class Person extends BasePerson implements Auditable, Serializable {
//Slow stuff
}

结果很棒,优化非常成功。

关于java - 如何创建两个具有相同实体的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58311586/

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