es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

JPA: consulta que coincide con las propiedades many-to-many de entidades no relacionadas.

Tengo las siguientes tres entidades:

@Entity
public class Item {
[…]
@ManyToOne(optional = false)
@JoinColumn(nullable = false)
private ItemDescriptor asset;
[…]
}

@Entity
public class ItemDescriptor {
[…]
@ManyToMany(fetch = FetchType.LAZY)
private Set<ContentPlan> contentPlans;
[…]
}

@Entity
public class Tenant {
[…]
@ManyToMany
private Set<ContentPlan> contentPlans;
[…]
}

Ahora, estoy buscando una consulta JPA para obtner lo siguiente:

Para el inquilino dado t, obtener todos los artículos i donde i.asset.contentPlans esté en t.contentPlans

He encontrado varias soluciones relacionadas, pero ninguna de ellas resuelve realmente el problema con esta configuración. ¿Alguien puede apuntarme en la dirección correcta?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una posible consulta JPA para lograr el resultado deseado sería:

    SELECT i FROM Item i JOIN i.asset a JOIN a.contentPlans cp WHERE cp IN (SELECT tcp FROM Tenant t JOIN t.contentPlans tcp WHERE t = :tenant)
    

    Aquí, primero unimos la entidad Item con la entidad ItemDescriptor y su colección de contentPlans. Luego, filtramos los elementos comprobando si su colección de contentPlans contiene algún plan que también está presente en la colección de contentPlans del objeto Tenant dado (:tenant).

    La subconsulta en la cláusula WHERE se utiliza para recuperar los contentPlans del objeto Tenant dado. Primero unimos la entidad Tenant con su colección de contentPlans y luego seleccionamos solo los propios planes.

    Tenga en cuenta que esta consulta asume que hay una propiedad o variable llamada “tenant” en el contexto donde se ejecuta la consulta, que está configurada con el objeto Tenant que queremos consultar. Es posible que deba modificar la consulta según su caso de uso específico.

Comments are closed.