2016-03-01 3 views
0

Я использую данные Spring JPA с гибернацией на задней панели с H2 в базе данных памяти.Spring JPA для хранения объекта внутри объекта

У меня есть следующие объекты:

@Entity 
public class EntityA { 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long entityAId; 
@Column 
@NotEmpty 
private String name; 
@OneToMany(mappedBy = "entityA") 
private List<EntityB> entityBList; 
//getter and setters 

@Entity 
public class EntityB { 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Integer id; 
@Column 
@NotEmpty 
private String name; 
@ManyToOne 
@JoinColumn(referencedColumnName = "entityAId") 
private EntityA entityA; 
//getter and setter 

Вот мои хранилища:

@Repository 
public interface EntityARepository extends JpaRepository<EntityA, Long> { 
} 

@Repository 
public interface EntityBRepository extends JpaRepository<EntityB, Integer> { 
    @Query(value = "FROM EntityB b where b.entityA.entityAId = ?1") 
    public List<EntityB> getEntityBByEntityAId(Long entityAId); 
} 

Мой вопрос:

Если у меня есть экземпляр entityA с 'п' экземплярами entityB в нем, и если я назову entityARepository.save(entityA);, тогда он сохранит entityB (возможно ли это?)? Я попробовал это, но это не сработало для меня. Я пробовал делать

entityARepository.save(entityA); 
entityBRepository.save(entityBList); 

Который спас результат. Но когда я получил entityA с использованием метода findOne из репозитория на entityAId, я получаю пустой список без каких-либо экземпляров EntityB.

Я даже попробовал запрос entityBRepository отдельно по entityAId, но я получаю пустой список результатов entityB.

Может кто-нибудь, пожалуйста, помогите мне узнать, что именно пропало?

ответ

2

Я считаю, что вам не хватает каскадной конфигурации.

Пожалуйста, попробуйте

@OneToMany(mappedBy = "entityA", cascade=CascadeType.ALL) 

сохранить его с помощью:

entityARepository.save(entityA); 

Для получения дополнительной информации о Каскад-Типов взглянуть на эту JPA and Hibernate Cascade Types

Edit: Там также могут быть некоторые ошибки конфигурации ... является ли ваш тестовый транзакционный? Здесь TestNG Отрывок:

@Test 
@ContextConfiguration(locations = { "classpath:spring-test-config.xml" }) 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) 
@Transactional 
public class MyRepositoryTest extends AbstractTransactionalTestNGSpringContextTests { 

Ваша весна-конфиг нормально? Он содержит что-то вроде этого?

<!-- only components from this package can be wired by spring --> 
    <context:component-scan base-package="com.xxx.*" /> 

    <!-- Directory to scan for repository classes --> 
    <jpa:repositories base-package="com.xxx.domain.repository" /> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${db.driver}" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value="${db.password}" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager"/> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" > 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 

     <property name="dataSource" ref="dataSource" /> 

     <property name="packagesToScan" > 
      <list> 
       <value>com.xxx.domain</value> 
      </list> 
     </property> 

     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="true" /> 
       <property name="generateDdl" value="true" /> 
      </bean> 
     </property> 

    </bean> 
+0

Спасибо, но это не работает для меня :( – SMA

+0

Это должно работать, что-то еще должно быть неправильным в вашей конфигурации. Как вы впрыснуть свой entityARepository? Как вы это проверить? Можете ли вы показать мне свою конфигурацию пружины? – user3227576

+0

Я отредактировал свой ответ, пожалуйста, проверьте конфигурацию spring- и test-config. – user3227576

Смежные вопросы