Я создаю весеннее загрузочное приложение и использую его встроенный в JpaRepository
интерфейс для хранения моих сущностей. У меня есть следующие две сущности (удалены геттеры и сеттеры для удобства чтения):
Профиль лица
@Entity
public class Profile {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToMany(mappedBy = "profileOne", orphanRemoval = true)
private List<Match> matchOnes;
@OneToMany(mappedBy = "profileTwo", orphanRemoval = true)
private List<Match> matchTwos;
}
Совпадение сущности
@Entity
@Table(uniqueConstraints={
@UniqueConstraint(columnNames = { "profileOne_id", "profileTwo_id" })
})
public class Match {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne
@JoinColumn(name = "profileOne_id")
private Profile profileOne;
@ManyToOne
@JoinColumn(name = "profileTwo_id")
private Profile profileTwo;
}
Чтобы понять поведение JpaRepository
, я написал следующий модульный тест.
@RunWith(SpringRunner.class)
@DataJpaTest
public class IProfileDaoTest {
@Autowired
private IProfileDao profileDao; //This class extends JpaRepository<Profile, long>
@Autowired
private IMatchDao matchDao; //This class extends JpaRepository<Match, long>
@Test
public void saveProfileTest() throws Exception {
@Test
public void profileMatchRelationTest() throws Exception {
//Test if matches stored by the IMatchDao are retrievable from the IProfileDao
Profile profileOne = new Profile("Bob"),
profileTwo = new Profile("Alex");
profileDao.saveAndFlush(profileOne);
profileDao.saveAndFlush(profileTwo);
matchDao.saveAndFlush(new Match(profileOne, profileTwo));
profileOne = profileDao.getOne(profileOne.getId());
Assert.assertEquals("Match not retrievable by profile.", 1, profileOne.getMatchOnes().size());
}
}
Теперь я ожидал, что совпадения появятся в профиле, но это не так. Я также попытался добавить CascadeType.ALL
к аннотации @ManyToOne
в объекте соответствия и добавить FetchType.EAGER
к аннотации @OneToMany
в объекте профиля.
Можно ли получить совпадения, сохраненные с matchDao, запросив профиль в profileDao? Или я должен найти совпадения с профилем с отдельной функцией?