2015-07-17 6 views
2

Как сдать тест? (работал перед переносом моего кода на использование репозиториев). bs сохраняются в базе данных после сохранения, но объект не обновляется. Что я должен сделать, чтобы достичь этого?Данные о пружинах jpa save

Учитывая эти классы:

@Entity 
public class A { 
    @Id 
    private String id; 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinColumn(name = "aId") 
    private Set<B> bs= new HashSet<B>(); 
    ... 
} 

@Entity 
public class B { 
    @Id 
    @GeneratedValue 
    private int id; 
    private String aId; 
    private String foo; 
    ... 
} 

И Repository:

@RepositoryDefinition(domainClass = A.class, idClass = String.class) 
public interface ARepository { 
    ... 
    void save(A a); 
    ... 
} 

Этот тест не в состоянии:

// "a" saved and flushed 
    B b = new B(); 
    b.setAId(a.getId()); 
    a.getBs().add(b); 
    ARepository.save(a); 
    assertTrue(b.getId() > 0); 

ответ

3

repository.save()persist (если предоставленный аргумент является временным) или merge (в противном случае).

Поскольку a не переходный, merge выполняется, это означает, что не существует persist операции, которая может быть каскадна bs.

Вы должны либо сохранить b явно или добавить b к новому a перед a сохраняется, так что persist каскадно правильно.

1

Возможно, причина в том, что объект B не в сохраняемого состоянии еще , Как только он будет сохранен - ​​вы не должны получать ошибки.

Должно выглядеть так:

// "a" saved and flushed 
B b = new B(); 
BRepository.save(b) 
b.setAId(a.getId()); 
a.getBs().add(b); 
ARepository.save(a); 
assertTrue(b.getId() > 0); 

Также могли бы вы предоставить StackTrace? Было бы очень полезно.

+0

перед использованием 'session.save' Мне не нужно было сохранять объект отдельно, чтобы получить Id, нет способа сохранить B ?, нет stackTrace, утверждение не выполняется. – xedo

+0

Вижу, я действительно воссоздаю ваш тест, и все работает отлично. Единственное отличие, что я создаю репозиторий следующим образом: 'public interface ARepository extends CrudRepository {}' Не могли бы вы предоставить свою конфигурацию? –

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