数据库的表实现成java类模型的时候,如果有外键关联,用类里面包含类的方法正确吗?
比如, 表年级Grade里有学校School的ID, 那么在Java的Grade类里放School类好,还是直接讲SchoolID放里面好
如果放SchoolID,那么要知道School的名字,就还要另外用一个String字段来保存它的名字,
如果直接放School类,就直接在School类里找就行了,哪种方法好呢
看具体情况 了
如果要在实体层,放类好
像这样
[code="java"]
@Entity
@Table(name="google_user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id", length = 22)
private Long id;
@ManyToOne
@JoinColumn(name = "parentgroupid")
private Group parentgroup;
@ManyToMany
@JoinTable(name="google_user_role")
private Set<Role> roles = new HashSet<Role>();[/code]
到展现层那里的BEAN时,用SCHOOLID还是比较好的因为我这边是用到了JAVASCRIPT的JSON
,JSON在处理对像包含对像(他们之间有偱环引用 的),还是用转换成SCHOOLID了,
再或者STRUTS,或SPRINGMVC里的FORM自动转换到BEAN时应该 也会出现不能自动给SCHOOL自动赋值,而只能是自己多建个属性SCHOOLID,在展现层里给他转换成SCHOOL
直接放类好
各有利弊吧
放类,更加清晰,但是如果School这个对象特别大,那Grade对象就很大,这种情况在大数据量,循环中很明显。
两者各有优劣,
其实,可以考虑将两者结合起来,把 schoolid和school成员都放进去,使用延迟加载。
getSchool时,判断school是否有值,通过schoolid进行加载。
我觉得Entity类要和表保持一致,表关系简单的情况下可以类包含,但模型复杂的情况下,直接放到类里的话会有个问题,当N个表都用外键关联时,DO对象会写的很土。
个人的建议。