2015-11-27 28 views
5

dinamik EntityGraph getirmek için nasıl. Uygulamada dinlenme API'sini açıklıyorum. Veriler üzerinde tam kontrol sahibi olmak istediğim için Spring veri dinlenmesini kullanmak istemiyorum.Ben JPA kullanarak Bahar Boot kullanarak uygulama geliştiriyorum Bahar Boot

Dinamik EntityGraph nasıl kullanılacağını anlamaya muktedir değilim.

    :

    varsayalım ben şu var modeli ben bu kimliği ile bana 1

    Sorular ürünü döndüren ürünü oluşturmak http://localhost:8090/product/1

    erişmek için dinlenme bağlantıyı takip gelmiş here

    @Entity 
    class Product { 
    
        @ManyToMany 
        Set<Tag> tags; 
    
        // other properties omitted 
    } 
    
    interface ProductRepository extends Repository<Customer, Long> { 
    
        @EntityGraph(attributePaths = {"tags"}) 
        Product findOneById(Long id); 
    } 
    

    alınan

  1. Varsayılan olarak mı Biz @EntityGraph söylediğim gibi t Etiketleri getirme? Evet ise, bu istek üzerine yapılandırılabilir mi? Ben sorgu dizesinde = etiketleri eklerseniz o zaman sadece ben onun etiketleriyle ürünü getirmesini istediğiniz, söyleyin.

this makalesini buldum ama nasıl yardımcı olabileceğinden emin değilim.

cevap

6

Yay Verileri JPA Repository EntityGraph tanımı statiktir. Eğer dinamik olmasını istiyorsanız programlama yoluyla sayfanızda bağlı gibi yapmanız gerekir:

EntityGraph<Product> graph = this.em.createEntityGraph(Product.class); 
graph.addAttributeNodes("tags"); //here you can add or not the tags 

Map<String, Object> hints = new HashMap<String, Object>(); 
hints.put("javax.persistence.loadgraph", graph); 

this.em.find(Product.class, orderId, hints); 

Ayrıca JPA depodaki EntityGraph ile yöntemini tanımlayabilirsiniz.

Product findOneById(Long id, boolean withTags){ 
    if(withTags){ 
    return productRepository.findOneByIdWithEntityGraphTags(id); 
    } else { 
    return productRepository.findOne(id); 
    } 
} 
:

interface ProductRepository extends Repository<Product, Long> { 

@EntityGraph(attributePaths = {"tags"}) 
@Query("SELECT p FROM Product p WHERE p.id=:id") 
Product findOneByIdWithEntityGraphTags(@Param("id") Long id); 
} 

Sonra EntityGraph veya EntityGraph olmadan findOne(T id) yerleşik bu yöntemi kullanan hizmetinde bir yöntemi var

İlgili konular