我想编写一个用于在线学习的 Java EE 应用程序。我正在考虑这个数据表示:
@Entity
public class Course {
private String name;
private String[] instructors;
private String[] teachingAssistants;
private GradeBook gradeBook;
// plenty of methods
}
@Entity
public class GradeBook {
private GradeBookColumn[];
// some methods
}
@Entity
public abstract class GradeBookColumn {
private String name;
private GradeBookColumnType type;
// more methods
}
我会拥有更多的东西,但你明白了。
现在,在 EJB 3.2 规范中,实体 bean 已被移除并替换为 JPA 实体。我的问题是如何应对这种悲惨的损失。序列化的 JPA 实体对我不起作用的三个原因:
- 表现。我需要通过网络推送整个实体及其所有数据。有相当多的数据,并且可能需要很长时间才能完成所有这些数据。
- 安全。如果实体中的所有数据都通过网络传输,则下载它的程序可以访问所有数据。但是,我希望只有在用户具有足够权限的情况下才能访问某些数据。
- 写访问。下载数据副本后,客户端应该能够对其进行更改。但是,如果进行了更改,它们将不会持久保存到服务器。当然,我总是可以将实体发送回服务器进行持久化,但我必须通过更慢的上游连接发送所有数据。
那么,在没有实体 bean 的情况下,我如何设计这个系统来满足这些要求呢?