Google Cloud SQL 上的 Hibernate:第一代 -> 第二代

Google Cloud SQL 上的 Hibernate:第一代 -> 第二代

我现在在 Google App Engine 上运行 Java + Hibernate 应用程序已有一段时间了。MySQL 数据库是 Google Cloud SQL(第一代)实例。现在我想将其升级为“第二代”实例。

如果我这样做,EntityManager 无法初始化,并且会提示某些类未定义。我需要进行任何配置更改吗?

第一代使用MySQL 5.5,第二代使用MySQL 5.7。

答案1

我建议您检查 persistence.xml 配置文件中的包名称和类。

<persistence-unit name="Jondow">
<class>com.example.appengine.cloudsql.ClassName</class>

然后,您将在代码中的某个地方检索该类,例如在 doGet 函数中:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("Jondow", properties);
EntityManager em = emf.createEntityManager();

确保你在该文件中定义了数据库中的所有表,并且某处定义了一个类,该类以正确的方式映射数据库中的表。我尝试从第一代 MySQL 5.5 迁移到第二代 MySQL 5.7,我只需要更改 pom.xml 上的数据库访问权限(实例名称、用户、密码)。然后 Hibernate 已在数据库中创建所有表。确保为 App Engine 填充了最少的数据,因为 Hibernate 会为你创建你定义的表,并且你可能会遇到检索空表的问题。另外,请确保你使用的用户具有以你需要的方式操作数据库的正确权限,因为如果用户没有正确的权限,HIbernate 将不会创建表

查看下一个链接,了解 Hibernate[1] 上的示例项目和 Cloud SQL[2] 上的文档,我将它们混合在一起,让两种方式都使用相同的 pom.xml。我分享了一个 init() 函数的代码,您可以在 [3] 示例中替换它,doGet 函数保持不变,请务必检查您使用的字符串名称是否正确。

Map<String, String> properties;
@Override
public void init() throws ServletException {

try {
  ApiProxy.Environment env = ApiProxy.getCurrentEnvironment();
  Map<String,Object> attr = env.getAttributes();
  String hostname = (String) attr.get("com.google.appengine.runtime.default_version_hostname");
  String url = hostname.contains("localhost:") ? System.getProperty("cloudsql-local") : System.getProperty("cloudsql");
  properties = new HashMap();
  if (!hostname.contains("localhost:")) {
     properties.put("javax.persistence.jdbc.driver", "com.mysql.jdbc.GoogleDriver");

  } else {
     properties.put("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver");

  }
  properties.put("javax.persistence.jdbc.url", url);
  log("connecting to: " + url);
  try {
    conn = DriverManager.getConnection(url);

  } catch (SQLException e) {
    throw new ServletException("Unable to connect to Cloud SQL", e);

  }
} finally {

}

}

您还可以查看 [4] 和 [5] 了解有关 Hibernate 的更多信息。在这里 [6] 您可能会找到一些有关从第一代 Cloud SQL 实例迁移到第二代 Cloud SQL 实例的有用信息。

[1]https://github.com/GoogleCloudPlatform/appengine-cloudsql-native-mysql-hibernate-jpa-demo-java/blob/master/src/main/java/com/google/appengine/demos/HibernateJpaServlet.java

[2]https://cloud.google.com/appengine/docs/standard/java/cloud-sql/

[3]https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/appengine-java8/cloudsql

[4]https://www.tutorialspoint.com/hibernate/hibernate_quick_guide.htm

[5]https://dzone.com/articles/spring-hibernate-google

[6]https://cloud.google.com/sql/docs/mysql/upgrade-db

相关内容