mysql - 通过 EJB 丢失从 DAO 到 Business 的列表中存储的 id(主键)值

标签 mysql jpa-2.0 ejb-3.0 eclipse-jee

我想在 XHTML 页面中显示用户列表。我通过 EJB (3.0) 从托管Bean 向业务发送一个请求,然后仍然通过 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(主键)。我的用户类有一个属性(出生日期),并继承自父类(super class) Parent(姓名、名字、邮件、电话...),该父类(super class)又继承自另一个名为 Who 的类,该类只有一个名为 id (主键)的属性。 然后我通过 EJB 将我的列表(用户)返回给业务,一旦进入业务,我意识到所有 id 属性都是 0。我保留了除 ids 之外的所有其他属性(姓名、前名...),但我无法计算弄清楚为什么我会失去这些值(value)观。 我在 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;
}

最佳答案

根据问题的描述,我想问一些问题

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

经验告诉我,在类中或至少在用 @MappedSuperclass 标记的父类中始终具有 @Id 属性。有些人在从映射的父类(super class)中检索 id 字段时仍然遇到问题。

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

关于mysql - 通过 EJB 丢失从 DAO 到 Business 的列表中存储的 id(主键)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39804994/

相关文章:

database - 什么时候使用@TableGenerator?

mysql - 在此 MySQL 查询中对记录进行分组和求和

mysql - 使用 Node.js 格式化日期以插入 MYSQL

java - JPA2 JoinColumns JoinColumn 名称不受尊重。 (Hibernate 3.6 和 H2)

持久化对象 jpa 时出现 java.lang.StackOverflowError

java - 建议使用 JSF 、 EJB 3.0 的应用程序设计模式

mysql - 多个 mysql 连接占用大量内存

MySql 查询帮助 : joints with sums and counts

hibernate - 在JPA 2中使用投影

java - 即使 child 不在,也能找到 parent