嘿家伙们,我的目标是创建一个EntityManager使用属性取决于哪个数据库正在使用。我见过这样的事情在我所有的谷歌搜索做了(我使代码更基本的对这个问题的目的):使用EntityManagerFactory导致重复的主键异常
@PersistenceUnit
private EntityManagerFactory emf;
private EntityManager em;
private Properties props;
@PostConstruct
public void createEntityManager(){
//if oracle set oracle properties else set postgres properties
emf = Persistence.createEntityManagerFactory("app-x");
em = emf.createEntityManager(props);
}
这工作,我可以成功加载Oracle或Postgres的性质,我可以选择来自任一数据库。不过,我在做INSERT语句时遇到了问题。每当INSERT完成时,我每次都会得到一个重复的主键异常!任何人都可以阐明为什么会发生这种情况?由于 -Brad
我的最终目标是让我的应用程序检测正在使用哪种类型的数据库(在glassfish中设置)并相应地设置EntityManager。我的研究指出使用EntityManagerFactory是最好的方法。你怎么看? – bradd 2010-03-10 18:47:51
@bradd为什么你的应用需要检测数据库?你能详细解释一下吗? – 2010-03-10 18:58:34
我们的目标是让我们的客户能够将glassfish配置为使用postgres或oracle,而不必担心修改persistence.xml文件。我们也希望远离为不同数据库创建不同版本的应用程序。 – bradd 2010-03-10 19:43:38