对于这些实体,我的JPA关系应该是什么?

对于这些实体,我的JPA关系应该是什么?,jpa,ebean,Jpa,Ebean,你好!我有两个实体:Tag和RelatedTag。标记具有名称、注释和相关标记的列表。RelatedTag基本上是一个标记,它有relationship和relatedNotes 以下是标记模型: 这两个实体的id相同,所以它们可以相互引用。我真的很困惑。我之前问过一个关于PersistenceException的问题,但我还是迷路了。请帮帮我。长期以来,我一直被困在这个问题中。非常感谢。你说的毫无意义。如果每个标签都有多个RelatedTag,它们如何共享相同的ID?两个RelatedTag不

你好!我有两个实体:Tag和RelatedTag。标记具有名称、注释和相关标记的列表。RelatedTag基本上是一个标记,它有relationship和relatedNotes

以下是标记模型:


这两个实体的id相同,所以它们可以相互引用。我真的很困惑。我之前问过一个关于PersistenceException的问题,但我还是迷路了。请帮帮我。长期以来,我一直被困在这个问题中。非常感谢。

你说的毫无意义。如果每个标签都有多个RelatedTag,它们如何共享相同的ID?两个RelatedTag不能具有相同的ID,但可以属于同一个标记。我的意思是,例如,有三个标记:Tag1 ID=1、Tag2 ID=2和Tag3 ID=3。Tag1可以将Tag2作为其relatedTag,因此relatedTag的id为3,但tag的id为1。如果Tag1可以将Tag2作为其related tag,则tag和tag之间应该存在关联。不在Tag和RelatedTag之间。就像人类可以有孩子一样,也是人类类型的。我应该在标签模型中添加什么字段?请帮帮我,我真的很困惑。非常感谢。私人设置相关标签;
package models;

import java.util.*;

import javax.persistence.*;
import javax.validation.*;

import play.data.Form;
import play.data.validation.Constraints.*;
import play.db.ebean.*;
import play.db.ebean.Model.Finder;
import scala.Int;

@Entity
public class Tag extends Model{

    @Id
    private int id;

    @Required
    @MaxLength(value=100)
    private String name;

    @MaxLength(value=200)
    private String notes;

    @OneToMany(cascade=CascadeType.ALL)
    private List<RelatedTag> relatedTags = new ArrayList<RelatedTag>();

    public static Finder<Integer, Tag> find = new Finder(Int.class, Tag.class);

    public Tag() {

    }

    public Tag(String name, String notes){
        this.name = name;
        this.notes = notes;
    }

    public Tag(int id, String name, String notes, List<RelatedTag> relatedTags) {
        this.id = id;
        this.name = name;
        this.notes = notes;
        this.relatedTags = relatedTags;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNotes() {
        return notes;
    }

    public void setNotes(String notes) {
        this.notes = notes;
    }

    public List<RelatedTag> getRelatedTags() {
        return relatedTags;
    }

    public void setRelatedTags(List<RelatedTag> relatedTags) {
        this.relatedTags = relatedTags;
    }

    public static List<Tag> all() {
        return find.all();
    }

    public static void create(Tag tag){
        tag.save();
    }

    public static void delete(int id){
        find.ref(id).delete();
    }

    public static void update(int id, Tag tag) {
        tag.update(id); // updates this entity, by specifying the entity ID
    }

    public static boolean exists(Tag newTag) {
        for(Tag allTags : Tag.find.all()) {
            if(allTags.getName().equals(newTag.getName()))
                return true;
        }

        return false;
    }       

}
package models;

import java.util.*;

import javax.persistence.*;
import javax.validation.*;

import play.data.Form;
import play.data.validation.Constraints.*;
import play.db.ebean.*;
import play.db.ebean.Model.Finder;
import scala.Int;

@Entity
public class RelatedTag extends Model {

    @Id
    private int id;

    private String relationship;

    private String relatedNotes;

    public RelatedTag() {}

    public RelatedTag(int id, String relationship, String relatedNotes) {
        this.id = id;
        this.relationship = relationship;
        this.relatedNotes = relatedNotes;
    }

    public void setId(int id){
        this.id = id;
    }

    public void setRelationship(String relationship){
        this.relationship = relationship;
    }

    public void setRelatedNotes(String relatedNotes) {
        this.relatedNotes = relatedNotes;
    }

    public int getId(){
        return id;
    }


    public String getRelationship(){
        return relationship;
    }

    public String getRelatedNotes() {
        return relatedNotes;
    }

    public static boolean exists(String tagRelated) {
        for(Tag tag : Tag.find.all()) {
            if(tagRelated.equals(tag.getName()))
                return true;
        }
        return false;
    }

    public static RelatedTag findByLabel(String tagRelated, String relation, String relatedNotes) {
        RelatedTag relatedTag = null;
        for(Tag tag : Tag.find.all()) {
            if(tagRelated.equals(tag.getName())) {
                relatedTag = new RelatedTag(tag.getId(), relation, relatedNotes);
            }
        }
        return relatedTag;
    }

    public static Tag findTag(int id) {
        for(Tag tag : Tag.find.all()) {
            if(id == tag.getId()) 
                return tag;
        }
        return null;
    }

}