读书人

JPA中的树投射

发布时间: 2012-10-06 17:34:01 作者: rapoo

JPA中的树映射

?

这是某个游戏引擎的技能树,比较简单,算是心得吧。先记下再说。

?

废话不说上代码,注解有问题可以搜搜。

package com.xxx.ge.skill.model;import java.util.List;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.OneToMany;import javax.persistence.Table;import javax.persistence.Transient;import com.xxx.common.BaseEntity;/** * 技能树 *  * @author ZhangPeng *  */
@SuppressWarnings("serial")@Entity@Table(name = "s_skill_tree", schema = "ge")public class SkillTree extends BaseEntity {private SkillTree parent; // 必要技能(父节点)private List<SkillTree> children; // 衍生技能(子节点)private Skill skill; // 技能private Integer level; // 必要等级public SkillTree() {}public SkillTree(SkillTree parent) {setData(parent, null);}public SkillTree(SkillTree parent, List<SkillTree> children) {setData(parent, children);}@ManyToOne@JoinColumn(name = "parent_id", nullable = true)public SkillTree getParent() {return parent;}public void setParent(SkillTree parent) {this.parent = parent;}@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER)@JoinColumn(name="parent_id")public List<SkillTree> getChildren() {return children;}public void setChildren(List<SkillTree> children) {this.children = children;}@ManyToOne@JoinColumn(name = "skill_id", nullable = false)public Skill getSkill() {return skill;}public void setSkill(Skill skill) {this.skill = skill;}@Column(name = "level", scale = 10)public Integer getLevel() {return level;}public void setLevel(Integer level) {this.level = level;}@Transientpublic boolean isRoot() {return (this.parent == null);}@Transientpublic boolean isLeaf() {return (this.children == null);}private void setData(SkillTree parent, List<SkillTree> children) {this.parent = parent;this.children = children;}}

?

?生出来的DDL:

?

-- Table "s_skill_tree" DDLCREATE TABLE `s_skill_tree` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `level` int(11) DEFAULT NULL,  `skill_id` bigint(20) NOT NULL,  `parent_id` bigint(20) DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `FK157CCC18A344D99E` (`skill_id`),  KEY `FK157CCC183AF245E3` (`parent_id`),  CONSTRAINT `FK157CCC183AF245E3` FOREIGN KEY (`parent_id`) REFERENCES `s_skill_tree` (`id`),  CONSTRAINT `FK157CCC18A344D99E` FOREIGN KEY (`skill_id`) REFERENCES `s_skill` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

?

本打算做成英雄无敌五里面的那个技能轮来了,不过是在懒得想,再说自己毕竟不是设计人员哈。先凑合了。

?

读书人网 >软件架构设计

热点推荐