• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

150
Views
Spring Data obtiene niños condicionalmente

He leído Spring Data JPARepository: Cómo recuperar condicionalmente las entidades de los niños . Pero quiero usar anotaciones JPA convenientes en lugar de unir manualmente a todos los niños.

Digamos que tengo el siguiente modelo:

 @Entity public class UserModel extends BaseModel<User> { @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List<CredentialModel> credentialList = new ArrayList<>(); @ManyToMany @JoinTable( name = "users_actions", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "action_id", referencedColumnName = "id") ) private List<ActionMode> actionList = new ArrayList<>(); }

Obtener credentialList y actionList puede ser una operación que requiere mucho tiempo (obtenciones de unión, etc.). No quiero obtener automáticamente credentialList ni actionList . Pero cuando accedo a ellos, espero que sean una Lista vacía en lugar de LazyInitializationException .

¿Puedo usar los campos incluso cuando no los JOIN FETCH específicamente en @Query . Solo deja que sea una lista vacía.

Si no, ¿hay alguna forma de lograr las mismas necesidades?

over 3 years ago · Santiago Trujillo
2 answers
Answer question

0

Devolver colecciones vacías generaría un problema: no podría distinguir entre una colección realmente vacía y una que simplemente no está cargada de forma perezosa. Puede verificar las colecciones antes de acceder a ellas a través org.hibernate.Hibernate.isInitialized(...) o PersistenceUnitUtil#isLoaded(...) en JPA2.

Sin embargo, le sugiero que use Data-Transfer-Objects en este punto. Para el caso de uso especial, donde las colecciones no son necesarias, simplemente cree una copia similar de su entidad sin esas propiedades innecesarias. Por supuesto, su creación de DTO debe realizarse dentro de una sesión abierta.

over 3 years ago · Santiago Trujillo Report

0

Creo que está tratando de hacer JOIN pero no FETCH, puede que solo esté usando los atributos de los objetos secundarios en la condición where. Me pregunto si algo así funcionará en JPQL.

 @Query("Select u from UserModel u INNER JOIN u.credentialList c INNER JOIN u.actionList a")
over 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error