自分に何が足りないのか分からないようです。JUnit Test を実行した後、これを取得しました
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: user lacks privilege or object not found: DTB_TABLENAME {Insert into ....
これは私のデータベースと関係がありますか? またはコード自体?
ここにいくつかのコードがあります:
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="myrestapi" transaction-type="JTA">
<class>com.rest.entity.TableNameBean</class>
<jta-data-source>MyDatasource</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
MyGenericDao
public abstract class MyGenericDao<T, ID extends Serializable> implements GenericDao<T, ID> {
private Class<T> persistentClass;
@SuppressWarnings("unchecked")
public MyGenericDao() {
this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
public abstract EntityManager getEntityManager();
public Class<T> getPersistentClass() {
return persistentClass;
}
//....
//....
@SuppressWarnings("unchecked")
public T findById(ID id, boolean lock) {
if(lock)
return getEntityManager().find(getPersistentClass(), id, LockModeType.PESSIMISTIC_WRITE);
else
return getEntityManager().find(getPersistentClass(), id);
}
public T makePersistent(T entity) {
getEntityManager().persist(entity);
return entity;
}
[テーブル名]ダオ
@Singleton
public class TableNameDao extends GenericJpaDao<TableNameBean, Integer>{
@PersistenceContext(unitName="myrestapi")
private EntityManager em;
@Override
public EntityManager getEntityManager() {
return em;
}
}
次に、私のTableNameDaoTest
public class TableNameDaoTest {
private static EJBContainer container;
@EJB
private TableNameDao tableNameDao;
@Test
public void testFindById() {
TableNameBean tableBean = tableNameDao.findById(1, false);
assertNotNull(tableBean);
}
@Test
public void testFindAll() {
fail("Not yet implemented");
}
@Test
public void testMakePersistent() {
TableNameBean tableBean = new TableNameBean();
tableBean.setLoginName("testname");
tableBean.setPassword("password");
tableNameDao.makePersistent(tableBean);
assertNotNull(tableBean.getAccountId());
}
@BeforeClass
public static void start() {
container = EJBContainer.createEJBContainer();
}
@Before
public void inject() throws NamingException {
container.getContext().bind("inject", this);
}
@AfterClass
public static void stop() {
container.close();
}
これについて何か助けてください。どうもありがとう。ところで、私は TomEE で実行しており、データベースも MySql です。また、データベースの URL、ドライバー、ユーザー名、およびパスワードを で構成しましたtomee.xml
。また、サーバー フォルダーにインポートして公開しました。