[英]How do I drop a database or collection using Hibernate OGM with MongoDB
我無法使用 Hibernate OGM 刪除數據庫或集合。 我試過使用這些本機查詢,但兩者都拋出異常
entityManagerFactory = Persistence.createEntityManagerFactory("myPersistence-unit");
EntityManager entityManager = openEntityManager( entityManagerFactory);
entityManager.getTransaction().begin();
String queryDropCollection = "db.Person.drop()";
String queryDropDB = "db.dropDatabase()";
entityManager.createNativeQuery(queryDropCollection).executeUpdate();
entityManager.createNativeQuery(queryDropDB).executeUpdate();
entityManager.getTransaction().commit();
entityManager.close();
刪除集合的異常:
Exception in thread "main" com.mongodb.util.JSONParseException:
db.Person.drop()
^
刪除數據庫的異常:
Exception in thread "main" com.mongodb.util.JSONParseException:
db.dropDatabase()
^
抱歉,目前無法執行此操作。
不過,我不確定在 OGM 使用數據庫時刪除數據庫是否是個好主意。
我創建了這兩個問題來跟蹤它:
感謝您的反饋。 如果您想進一步幫助我們,您可以嘗試解決項目中的問題並向我們發送修復程序。 我們會幫助你。
所以,只是為了給出一個如何在測試中使用它的具體例子,我添加了這個答案。
我使用 OGM 和 MongoDB 的工作可重復測試類如下所示:
class OgmAccessorTest {
private static EntityManagerFactory entityManagerFactory;
private static EntityManager entityManager;
private static TransactionManager transactionManager;
@BeforeAll
static void initialize() {
entityManagerFactory = Persistence.createEntityManagerFactory("ogm-mongodb");
entityManager = entityManagerFactory.createEntityManager();
transactionManager = com.arjuna.ats.jta.TransactionManager.transactionManager();
}
@BeforeEach
void clearDatabase() throws NotSupportedException, SystemException, SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException {
transactionManager.begin();
// Collection == name of the class being saved ⮧
entityManager.createNativeQuery("db.GameCharacter.drop()").executeUpdate();
transactionManager.commit();
}
@Test
void writeShouldBeAbleToWriteRetreivableGameCharacterToMongoDB() throws SecurityException, IllegalStateException, NotSupportedException, SystemException, HeuristicMixedException, HeuristicRollbackException, RollbackException {
GameCharacter sylvia = GameCharacters.sylvia();
OgmAccessor.write(sylvia, entityManagerFactory);
transactionManager.begin();
GameCharacter loadedGameCharacter
= entityManager.find(GameCharacter.class, sylvia._id);
assertNotNull(loadedGameCharacter);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.