1

Product私のデータベースには、そのようなフィールドを持つテーブルがあります。

@Transient
private Map<Locale, String> description = new HashMap<>();

descriptionクラスで定義されていProductLocalizationます。

に追加columnDefinition = "LONGTEXT"した後

@Column(name = Product.COLUMN_DESCRIPTION, columnDefinition = "LONGTEXT")
private String description;

そのクラスでは、必要に応じて255マークより長い説明を設定できますが、2つのテストが以前に行で失敗し始めましproductDao.saveAndFlush(product)product.setDescription(descriptions)。重要なのは、テストではなく、アプリケーションでその操作を行うと、すべてが正常に機能することです。テストのみが問題を引き起こします

saveAndFlush()パッケージから取得した方法ですorg.springframework.data.jpa.repository

エラーは両方のテストで同じです。

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PRODUCT_LOCALIZED
Error Code: -5501
Call: INSERT INTO product_localized (description, entity_id, language) VALUES (?, ?, ?)
    bind => [angielski, 3, en]
Query: InsertObjectQuery(ProductLocalization{description=angielski})
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:804)

テストのコードは次のとおりです。

 @Test
public void testMultilingualCreate() {
    // Given
    String polish = "polski", english = "angielski";
    Product product = new Product();
    product.setName("Product name");
    Map<Locale, String> descriptions = new HashMap<>(); 
    descriptions.put(Locale.ENGLISH, english);
    descriptions.put(Messages.POLISH, polish);

    // When
    product.setDescription(descriptions);
    Product p = productDao.saveAndFlush(product);
    product = productDao.findOne(p.getId());

    // Then
    assertEquals(polish, product.getDescription(Messages.POLISH));
    assertEquals(english, product.getDescription(Locale.ENGLISH));
}

@Test
public void testMultilingualUpdate() {
    // Given
    String polish = "polski", english = "angielski", english2 = "another english description";
    Product product = new Product();
    product.setName("Product name");
    Map<Locale, String> descriptions = new HashMap<>(); 
    descriptions.put(Locale.ENGLISH, english);
    descriptions.put(Messages.POLISH, polish);

    // When
    product.setDescription(descriptions);
    product = productDao.saveAndFlush(product);
    assertEquals(english, product.getDescription(Locale.ENGLISH));
    descriptions.put(Locale.ENGLISH, english2);
    product.setDescription(descriptions);
    product = productDao.saveAndFlush(product);

    // Then
    assertEquals(polish, product.getDescription(Messages.POLISH));
    assertEquals(english2, product.getDescription(Locale.ENGLISH));
}

ここで何が問題になっていますか?どうすれば修正できますか?

4

0 に答える 0