gpt4 book ai didi

ejb-3.0 - EJB3 中的嵌入式对象继承

转载 作者:行者123 更新时间:2023-12-03 13:26:56 29 4
gpt4 key购买 nike

我正在使用 EJB3 开发用户/密码系统。

用户有一个嵌入式密码。我有两种密码:用户定义的或非用户定义的。因此我有一个父类(super class) Password 及其子类 GeneratedPassword。架构确实值得商榷。

这里是“签名”:

@Entity
@NamedQueries({ //... })
@Table(name="UserAccount")
public class UserAccount implements Serializable {

@Id
@Email
private String email;

@Embedded
private Password password;


public UserAccount(String email) {
this.email = email;
this.password = new GeneratedPassword();
}

// ...
}

@Embeddable
public class Password implements Serializable {

private String encryptedPassword;

// ...
}

@Embeddable
public class GeneratedPassword extends Password {

private String tmpPassword;
// ...
}

问题是我有一个奇怪的异常(奇怪是因为我不明白...):

Caused by: javax.persistence.EntityExistsException: 
Exception Description: No subclass matches this class [class entities.user.GeneratedPassword] for this Aggregate mapping with inheritance.
Mapping: org.eclipse.persistence.mappings.AggregateObjectMapping[password]
Descriptor: RelationalDescriptor(entities.user.UserAccount --> [DatabaseTable(UserAccount)])

第二部分:

Caused by: Exception [EclipseLink-126] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: No subclass matches this class [class entities.user.GeneratedPassword] for this Aggregate mapping with inheritance.
Mapping: org.eclipse.persistence.mappings.AggregateObjectMapping[password]
Descriptor: RelationalDescriptor(entities.user.UserAccount --> [DatabaseTable(UserAccount)])

所以我从这些异常中了解到,GeneratedPassword 未被识别为实体。但是如果我使用密码类,一切都很好!于是又回到了不知所措的状态……

有人知道如何在层次结构中使用可嵌入实体吗?这就是问题所在吗???

最佳答案

规范没有说明任何关于可嵌入对象的继承,所以看起来它不受支持。可能是因为以简单为目标。

当然有些实现可以有它。不幸的是,Hibernate 不是其中之一:https://hibernate.onjira.com/browse/HHH-1910Eclipselink 支持,但不通过注释或 XML 描述符:http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Embeddable#Inheritance

顺便说一句,问题是用hibernate标记的,但是你使用的是EclipseLink。

关于ejb-3.0 - EJB3 中的嵌入式对象继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8355883/

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