这是某个游戏引擎的技能树,比较简单,算是心得吧。先记下再说。
废话不说上代码,注解有问题可以搜搜。
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;
}
@Transient
public boolean isRoot() {
return (this.parent == null);
}
@Transient
public 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" DDL
CREATE 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;
本打算做成英雄无敌五里面的那个技能轮来了,不过是在懒得想,再说自己毕竟不是设计人员哈。先凑合了。