0

我想在 XHTML 页面中显示用户列表。我通过 EJB (3.0) 从 managedBean 向业务发送请求,然后仍然通过 EJB (3.0) 向 DAO 发送另一个请求。我正在使用 JPA 2 和带有实体管理器的 MySQL 数据库。

我正在向我的数据库发送以下请求

@Remote(IDaoUser.class)
@Stateless
Public class DaoUser implements IDaoUser

@PersitenceContext(unitName = "persistence_unit")
Private EntityManager em;

@Override
Public List<User> getAll() {
    Query query = em.createQuery("SELECT u FROM User u");
    List<User> users = query.getResultList();
    return users;
}

那时一切都很好,我的列表中的所有用户都有所有属性,尤其是 id(主键)。我的用户类有一个属性(生日)并继承自超类 Parent(姓名、名字、邮件、电话...),该父类再次继承自另一个名为 Who 的类,该类只有一个名为 id 的属性(主键)。然后我通过 EJB 将我的列表(用户)返回给企业,一旦进入企业,我意识到所有的 id 属性都是 0。我保留了除 id 之外的所有其他属性(姓名、名字……),我想不通找出我为什么会失去这些价值观。在DAO中我的List中有很好的存储,但在业务中一次全部更改为0。

这是我的商务舱,非常简单

@Remote(IBusinessUser.class)
@Stateless
Public class BusinessUser implements IBusinessUser

@EJB
private IDaoUser proxy;

@Override
Public List<User> getAll() {
    List<User> users = proxy.getAll();
    return users;
}
4

2 回答 2

0

谢谢你的帮助。实际上,两个父类本身都是实体。我的超类“Who”是唯一一个带有注释@Id 的 id 属性(主键)。我不能用@MappedSuperclass 标记我的超类,因为它与另一个类相关联。

于 2016-10-02T10:41:36.323 回答
0

鉴于问题的描述,我会问一些问题

  1. 是父类实体本身,即它们是否用@Entity 注释。
  2. 您需要确保 @Id 在您的主键上。您是否在主键上有 @Id 注释。

经验告诉我在类中或至少在带有@MappedSuperclass 标记的父类中始终具有@Id 属性。有些人仍然无法从映射的超类中检索他们的 id 字段。

因此,请参阅 JEE 文档以了解使用MappedSuperclass注释。这可能需要更改您的对象继承模型,但考虑到您的要求,这应该不是问题。

于 2016-10-01T12:19:30.180 回答