tipos teoria subgrafos subgrafo sirven representacion que para matematicas los informatica inducido grafos discretas aplicaciones java jpa-2.1

java - teoria - Subgrafo de subgrafo de grafica de entidad nombrada



teoria de grafos matematicas discretas (1)

Soy nuevo en JPA 2.1 y comencé a usar gráficos de entidades nombradas recientemente. Para mi proyecto estoy mapeando la siguiente relación en JPA 2.1:

Order -> OrderDetail -> Product -> ProductLine

La pregunta:

Quiero dar instrucciones a JPA para que se una y obtenga todos los datos necesarios. Hasta el momento, esto funciona perfectamente para Order -> OrderDetail -> Product, pero no he logrado hasta ahora agregar un Sub-Sub Graph para ir tan profundo como la clase ProductLine. ¿Cómo hago un subgrafo de un subgraph? Ex obtener el ProductLine del producto?

Aquí están mis entidades (omitidos y setters omitidos):

Orden

@Entity @Table(name="ORDERS") @NamedEntityGraph( name = "graph.Order.details", attributeNodes = { @NamedAttributeNode(value = "details", subgraph = "graph.OrderDetail.product") }, subgraphs = { @NamedSubgraph(name = "graph.OrderDetail.product", attributeNodes = @NamedAttributeNode("product")) } ) public class Order implements Serializable{ @Id @Column(name = "orderNumber") private Long number; @Column(name = "orderDate") private Date date; @OneToMany(mappedBy = "order") private List<OrderDetail> details; }

Detalle de la orden

@Entity @Table(name = "orderdetails") public class OrderDetail implements Serializable{ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "orderNumber") @Id private Order order; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "productCode", nullable = false) @Id private Product product; @Column(name = "orderLineNumber") private int lineNumber; @Column(name = "quantityOrdered") private int quantity;

Producto

@Entity @Table(name = "products") class Product { @Column(name = "productCode") @Id private String code; @Column(name = "quantityInStock") public int quantity; @ManyToOne @JoinColumn(name = "productLine") private ProductLine line;

Línea de producto

@Entity @Table(name = "productlines") public class ProductLine { @Id @Column(name = "productLine") private String line; @Column private String textDescription;


La respuesta simple es que no puede hacer esto porque, con la implementación actual de JPA, terminaría haciendo dos consultas separadas y teniendo que lidiar con los Productos Cartesianos. Algunas versiones futuras de JPA podrían extenderse para incluir más niveles de subgrafos, pero tal como está hoy, no lo hace. Existe un grupo JPA SPEC que funciona en la próxima versión de JPA. Siéntase libre de enviar su solicitud / sugerencia allí .

Aquí en StockOverflow hay otra referencia a la misma pregunta .