Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nhận tất cả trẻ em và trẻ em từ JPA cha mẹ

Bạn có thể xử lý điều này trong mô hình miền bằng cách tạo mối quan hệ hai chiều và viết một phương thức đệ quy để đi trên cây. Một ưu điểm của điều này là nó sẽ xử lý trẻ em ở mọi cấp độ.

Điều này sẽ trông giống như bên dưới và sau đó đối với bất kỳ trường hợp nào bạn có thể làm:

SomeEntity e = //;
e.getChildren(); //only direct children
e.getAllChildren(); //all children

Thực thể:

@Entity
@Table(name = "some_entity")
public final class SomeEntity {

    @Column(nullable = false, unique = true, length = 20)
    private String externalId;

    @Column(nullable = false, length = 50)
    private String name;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "parentId", nullable = true)
    private SomeEntity parent;

    @OneToMany(mappedBy = "parent")
    private List<SomeEntity> children; //or Set<>

    //returns direct children
    public List<SomeEntity> getChildren(){
        return children;
    } 

    //returns all children to any level
    public List<SomeEntity> getAllChildren(){
        getAllChildren(this);
    }

    //recursive function to walk the tree
    private List<SomeEntity> getAllChildren(SomeEntity parent){
        List<SomeEntity> allChidren = new ArrayList<>();

        for(SomeEntity child : children){
            allChildren.add(child);
            allChildren.addAll(getAllChildren(child);
        }

        return allChildren;
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa các hàng mysql trùng lặp không có khóa chính

  2. AttributeError:Đối tượng 'tuple' không có thuộc tính 'encode' - MySQLdb Python

  3. Cách chuyển nhiều biến sang PHP bằng jQuery

  4. Nhóm truy vấn mysql theo khoảng thời gian 15 phút

  5. Hiệu suất MySQL:MyISAM so với InnoDB