我有這個物體。它應該同時適用于內部和外部用戶。
@Entity(name = "TokenAuthentication")
class TokenAuthenticationEntity<T>/span>(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)。
var id: Long? = null。
...
@NotNull[/span]?
@ManyToOne(fetch = FetchType.EAGER)
val user: T,
) : BaseEntity()
當我運行這個時,我得到了
屬性 TokenAuthenticationEntity.user 有一個非系結的型別,并且沒有明確的目標物體。解決這個通用的使用問題或設定一個明確的目標屬性
所以Hibernate告訴我不要用我的泛型,它需要明確的定義。你們有誰知道如何用泛型來運行這個系統?
uj5u.com熱心網友回復:
這是不可能的。原因是T型別在編譯時被擦除了。這個T型別在編譯時被用來檢查型別并保證型別安全,但隨后它就被洗掉了。盡管如此,TokenAuthenticationEntity 的每個實體都可以有不同的 T 值,正如之前解釋的那樣,這些資訊會丟失。
你實際上可以做的是:
你可以這樣做
@MappedSuperclass
public abstract class TokenAuthenticationEntity< T> {
private T user。
}
現在你可以基于這個通用的超類來創建你的物體:
public class InternalUser extends TokenAuthenticationEntity< IUser> { }
public class ExternalUser extends TokenAuthenticationEntity< EUser> { }
為什么?因為TokenAuthenticationEntity的每個具體子類都有一個型別T,這個型別被定義了,并且在子類內部被保留和唯一。在這種情況下,JPA將根據所選擇的@InheritanceStrategy(如果沒有指定Inheritance注解或者沒有為物體類層次結構指定繼承型別,則使用SINGLE_TABLE映射策略)將你的子類存盤在一個或多個表中。更多細節請見https://www.baeldung.com/hibernate-inheritance#single-table.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/332719.html
標籤:
