`

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;
	}

	@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;

 

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

 

分享到:
评论
1 楼 yawei 2010-11-29  
good example. thanks

相关推荐

    jpa单表递归树形结构实现

    `JPA(Java Persistence API)`是Java EE平台中的一个标准,用于管理关系数据库的对象关系映射(ORM)。在本示例中,我们将探讨如何使用Spring JPA来实现单表递归树形结构。 首先,我们需要理解递归树形结构。在...

    jpa 批注参考 doc 格式 提供了一个对象关系映射方法

    - `@OrderBy`:在集合映射中,指定排序规则。 6. **组合**: - `@Embeddable`:定义一个可嵌入的类,其属性可以被其他实体包含。 - `@Embedded`:在实体类中嵌入一个`Embeddable`类。 - `@AttributeOverride`、...

    网上购物struts2+spring+jpa+ajax

    JPA是Java平台上的ORM(Object-Relational Mapping)规范,用于处理Java对象与关系数据库之间的映射。它简化了数据库操作,开发者可以通过Java对象直接操作数据,而无需编写大量的SQL语句。在这个项目中,JPA可能与...

    网上书城javaee版本 jsf+jpa

    JPA是JavaEE中的对象关系映射(ORM)规范,用于在Java应用中处理数据库操作。它提供了一种统一的方式来映射Java对象到关系数据库表,消除了直接使用SQL语句的需要。JPA通过实体类(Entity)来表示数据库表,通过注解...

    JPA基础教程(中文版)

    - **ORM映射元数据**:JPA允许开发者使用XML或JDK 5.0注解来定义对象与数据库表之间的映射关系。元数据描述了实体类如何对应到数据库表,使得框架可以自动将对象持久化到数据库中。 - **JPA API**:这个API提供了一...

    JPA注解参考

    - **@Inheritance**:用于定义继承策略,决定如何在数据库中存储继承树。 - **@DiscriminatorColumn** 和 **@DiscriminatorValue**:与继承策略配合,用于区分不同子类的实例。 #### 查询注解 - **@NamedQuery** ...

    JPA-Hibernate实现所需的完整Jar包

    **JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的数据,它简化了在Java应用程序中处理持久性的工作。JPA通过提供对象/关系映射(ORM)工具,允许开发人员使用面向对象的编程模型来与...

    JPA STRUTS SPRING EXTJS JSON 同学录

    在本项目中,JPA 可能用于将 Java 类(如学生信息类)映射到数据库表,简化了数据库操作,减少了对SQL的直接依赖。 2. **Struts**: Struts 是一个基于 MVC(Model-View-Controller)设计模式的Java Web框架。在这个...

    综合JPA,spring2.5.6,dom,struts1,struts2的jar包

    本文将详细解析标题“综合JPA,spring2.5.6,dom,struts1,struts2的jar包”中涉及的关键技术,并探讨它们在实际开发中的应用。 首先,JPA(Java Persistence API)是Java平台上的一个标准,用于管理关系数据库中...

    SpringMVC3.2 demo

    SpringMVC 3.2 是一个强大的Java web开发框架,由Spring.IO团队维护,用于构建高效、...同时,理解并掌握SpringMVC的MVC模式、ZTree的树形数据展现、JPA的ORM映射以及数据库连接配置,对提升Java Web开发能力大有裨益。

    对于java的树形结构的抽象与拓展.docx

    总结来说,构建Java的树形结构时,我们可以通过Hibernate结合JPA注解来映射数据库表,但也可以选择在程序中管理父子关系以增加灵活性。通过抽象基类,可以实现通用的树形结构操作,使得代码复用性更高。在实际开发中...

    春天数据jpa一对多

    在Java开发中,Spring Data JPA 是一个非常重要的框架,它简化了数据库操作,并提供了ORM(对象关系映射)的功能。"春天数据JPA一对多"这个标题涉及到的是Spring Data JPA 中的一种关联关系——一对一(One-to-One)...

    spring-project-banque:Spring JPA - MVC

    JPA通过ORM(对象关系映射)技术将Java对象与数据库表进行映射,简化了数据访问层的开发。 **2. 实现ORM** Spring JPA主要依赖于Hibernate、EclipseLink等JPA提供商来实现ORM。它支持注解驱动的配置,通过`@Entity`...

    Java动态树形权限菜单JavaScript+SqlServer2005

    使用Spring Data JPA或Hibernate作为ORM(对象关系映射)工具,可以方便地与数据库进行交互,如查询用户角色和权限信息。 2. **动态树形结构**:在前端,JavaScript库如JQuery、AngularJS或React可以帮助创建动态的...

    JSP无限级分类目录树-sorttree.zip

    如果使用JPA(Java Persistence API),还可以添加@Entity注解以支持ORM(对象关系映射)。 3. DAO层:定义一个数据访问对象(DAO)接口,包含获取所有根节点分类、根据ID获取分类以及获取指定分类的所有子分类等...

    JPATreeDAO:JPATreeDAO,代码库和文档来自 Fritz Ritzberger

    JPA是Java平台上的一个标准,用于管理关系数据库中的对象,简化了数据库操作,通过ORM(对象关系映射)技术实现了Java对象与数据库表之间的映射。 **JPA基础** JPA的核心概念包括实体(Entity)、实体管理器...

    Matriz-Curricular:使用JPA,PostGresql在Spring Boot中制成的Api支架。

    2. **Java Persistence API (JPA)**: JPA是Java EE的一部分,它提供了一种标准的方式来处理对象-关系映射(ORM)。JPA允许开发者用Java对象来操作数据库,通过Entity、Repository和Service层进行数据的CRUD操作。 3. ...

    springboot demo基本的增删改查

    JPA是Java平台上的标准ORM(对象关系映射)规范,它允许我们将数据库操作与业务对象关联起来,使得我们可以像操作Java对象一样操作数据库记录。 在SpringBoot中,配置JPA非常简单。只需要在`pom.xml`文件中添加对应...

    JPA之使用JPQL语句进行增删改查

    JPA查询引擎可以将JPQL字符串解析成语法树,获取表达式中的实体对象-关系映射的元数据,然后生成等价的SQL。例如: ```java String jpql = "select p from Person p where p.age &gt; " + age; Query query = ...

Global site tag (gtag.js) - Google Analytics