如何使用带 MongoDB 的 Hibernate OGM 删除数据库或集合
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 使用数据库时删除数据库是否是个好主意。
我创建了这两个问题来跟踪它:
- 删除数据库:https://hibernate.atlassian.net/browse/OGM-1432
- 掉落 collection: https://hibernate.atlassian.net/browse/OGM-1433
感谢您的反馈。
如果你想尝试帮助我们更多,你可以尝试解决项目中的问题并向我们发送修复。我们会帮助你。
所以,为了给出一个如何在测试中使用它的具体示例,我添加了这个答案。
我使用 OGM 和 MongoDB 的工作可重复测试 class 如下所示:
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);
}
}
我无法使用 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 使用数据库时删除数据库是否是个好主意。
我创建了这两个问题来跟踪它:
- 删除数据库:https://hibernate.atlassian.net/browse/OGM-1432
- 掉落 collection: https://hibernate.atlassian.net/browse/OGM-1433
感谢您的反馈。 如果你想尝试帮助我们更多,你可以尝试解决项目中的问题并向我们发送修复。我们会帮助你。
所以,为了给出一个如何在测试中使用它的具体示例,我添加了这个答案。
我使用 OGM 和 MongoDB 的工作可重复测试 class 如下所示:
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);
}
}