当前位置: 首页 > 面试题库 >

动态JPA连接

丁沛
2023-03-14
问题内容

我有一个使用JPA 2的相当标准的Java EE6
Web应用程序,并且具有依赖关系注入连接到MySQL数据库,并且一切正常。我现在想做的是让该应用程序与我们在客户端站点上安装的其他应用程序的数据库交互-
本质上充当我们其他应用程序安装的一个控制点。

我正在努力的是如何最好地与其他数据库进行交互。理想情况下,我想为每个安装创建一个EntityManager并使用JPA进行交互,但是我看不到任何设置方法。例如,我可能有一种应用程序类型的5个安装(因此还有数据库),而主控制应用程序要等到运行时才能知道其他安装。这似乎排除了使用EntityManager的依赖项注入以及所有自动事务删除等问题的替代方法。替代选项是仅创建一个DataSource并手动进行交互。尽管很灵活,但这显然需要付出更多的努力。

因此,我的问题确实是如何最好地解决这个问题?


问题答案:

我也在对此进行研究,到目前为止,我已经找到了以下博客文章,该文章描述了一种实现方法
:http://ayushsuman.blogspot.com/2010/06/configure-jpa-during-run-time-dynamic
.html:

从persistance.xml中删除了所有数据库属性

<persistence>
<persistence-unit name="jpablogPUnit" transaction-type="RESOURCE_LOCAL">
<class>com.suman.Company</class>
</persistence-unit>
</persistence>

更改了您在其中配置entityManager的java文件,在本例中为TestApplication.java

package com.suman;

import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.apache.log4j.Logger;

/**
* @author Binod Suman
*/
public class TestApplication {

Logger log = Logger.getLogger(TestApplication.class);
public static void main(String[] args) {
TestApplication test = new TestApplication();
test.saveCompany();
}

public void saveCompany(){
log.info("Company data is going to save");
EntityManagerFactory emf;
Map properties = new HashMap();
properties.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
properties.put("hibernate.connection.url", "jdbc:mysql://localhost:3306/sumandb");
properties.put("hibernate.connection.username", "root");
properties.put("hibernate.connection.password", "mysql");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.show-sql", "true");
//emf = Persistence.createEntityManagerFactory("jpablogPUnit");
emf = Persistence.createEntityManagerFactory("jpablogPUnit",properties);
EntityManager entityManager = (EntityManager) emf.createEntityManager();
entityManager.getTransaction().begin();
Company company = new Company(120,"TecnoTree","Espoo, Finland");
entityManager.persist(company);
entityManager.getTransaction().commit();
log.info("Company data has been saved");
}

}


 类似资料:
  • 假设我有一个生成的实体,如下所示: 我的输入值是字段名称(“可用性”、“生日”、“CVID”...)和一个字符串值,我应该使用它对所有字段执行“like”。 我想从以下字段名开始构建一个查询: null 我试图使用PathBuilder,但似乎要使用“getString或getBoolean”之类的方法,就必须知道要提取的字段的类型。在我的例子中,由于我只是从字段名开始,所以我不能使用这些方法,也

  • 问题内容: 我需要创建一个“真实的”动态JPA 。我得到的陈述。看起来像: 这是我实现的: 我试图构建一个big ,其中包含所有其他谓词,并将其添加到中,但这些谓词再次覆盖旧值。似乎没有可能添加而不是更改谓词:-( 实际的项目更加复杂,因为有些对需要使用,而另一些需要使用。但这还不够:可能有一个额外的声明,如like 。在这里,值必须拆分并创建如下语句: UPDATE和SOLUTION 得到两个列

  • 我需要创建一个“真正的”动态JPA。我得到一个语句。看起来像: 更新和解决方案得到了两个列表,第一个列表为和工作良好。第二个列表包含或语句,如exspected:

  • 致: 我怎么能这么做?

  • 技巧 有人问我,如何通过选项来指定动态连接器,而不使用缺省系统自带的动态连接器。我后来查了下ld的手册,有这么一个选项: -Ifile --dynamic-linker=file Set the name of the dynamic linker. This is only meaningful when generating dynamically linked ELF ex

  • 现在我扪心自问,是不是有什么“点符号”或者其他什么东西让这个案例变得可有可无。在E。例如:本机SQL我会做一些事情,比如创建一个子查询,并从内部投影中选择所有别名值()。 如果有任何建议,我将不胜感激。