Напишите некоторые обычные тесты для моего MVC webapp и остановились при тестировании findById(). Мои классы моделей:Как правильно аннотировать объекты спящего режима
@Entity
public class Product {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
private double purchasePrice;
private double retailPrice;
private double quantity;
@ManyToOne
@JoinColumn (name = "supplier_id")
private Supplier supplier;
@ManyToOne
@JoinColumn (name = "category_id")
private Category category;
@Entity
public class Category {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Product> products;
@Entity
public class Supplier {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@LazyCollection(LazyCollectionOption.FALSE)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@OneToOne
private Contact contact;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany
private List<Product> products;
И мой тестовый код:
private Product productTest;
private Category categoryTest;
private Supplier supplierTest;
@Before
public void setUp() throws Exception {
categoryTest = new Category("Test category", "", null);
supplierTest = new Supplier("Test supplier", null, null);
productTest = new Product("Test product","", 10, 20, 5, supplierTest, categoryTest);
categoryService.save(categoryTest);
supplierService.save(supplierTest);
productService.save(productTest);
}
@Test
public void findById() throws Exception {
Product retrieved = productService.findById(productTest.getId());
assertEquals(productTest, retrieved);
}
Ну, утверждение не удалось, из-за разницы product.category.products и product.supplier.products свойства, как вы можете видеть на pic: Один продукт имеет нуль, другой как {PersistentBag}. Конечно, я могу легко взломать его, написав собственный метод equals (который будет игнорировать эти свойства), но уверен, что это не лучший способ.
Итак, почему эти поля отличаются? Я уверен, что решение в правильной аннотации полей объектов.