我如何从@OneToMany注释字段中获取两列

时间:2015-12-22 16:31:55

标签: spring hibernate jpa one-to-many

我有一个具有树结构的类:

@Entity
@Table(name="ttp")
public class Ttp {
    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
    @Column(unique=true, nullable=false)
    private String name;
    private int position;
    @JoinColumnOrFormula(column = @JoinColumn(name="parent", referencedColumnName="id"))
    private Long parentId;
    //private Map<Long,Integer> childsMap;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinTable(name="parent_ttp",joinColumns=@JoinColumn(name="child_id", referencedColumnName="id"),
    inverseJoinColumns=@JoinColumn(name="parent_id", referencedColumnName="id"))
    private Ttp parent;
    @OneToMany(fetch = FetchType.LAZY)
    @JoinTable(name="parent_ttp",joinColumns=@JoinColumn(name="parent_id", referencedColumnName="id"),
    inverseJoinColumns=@JoinColumn(name="child_id", referencedColumnName="id"))
    private List<Ttp> childs= new ArrayList<Ttp>();

    public Ttp(String name, Ttp parent) {
        this.name = name;
        this.parent = parent;
    }
    public Ttp() {

    }
...getters and setters

当我获得 parentId 时,它工作正常,因为我只得到没有上课的Id父母。 如何在List或HashMap中获取 childs 的ID和位置属性值,而不完全加载对象?

P.S。抱歉我的英文不好

1 个答案:

答案 0 :(得分:0)

您的映射是错误的。建模@OneToMany关系时不需要连接表。尝试这样的事情,这是最简单的方法,如果你需要更复杂的东西,可以在此基础上进行构建

@Entity
@Table(name = "ttp")
public class Ttp {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(unique = true, nullable = false)
    private String name;

    private int position;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_ttp")
    private Ttp parent;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
    private List<Ttp> children = new ArrayList<Ttp>();

    public Ttp(String name, Ttp parent) {
        this.name = name;
        this.parent = parent;
    }
    public Ttp() {

    }
...getters and setters