26

Why are these important, what effect do they have on the database at hand?

Isn't the "schema" already decided at that point, as it exists in the database?

What exactly is a "catalog"? What kind of variable/input is the JPA catalog field expecting? Also, same question for the "schema" field.

Sam Levin
  • 3,326
  • 7
  • 30
  • 44

1 Answers1

30

Catalogs and schemas are "namespaces" that you define on the server side of the database. Some databases contains schemas, some contains catalogs, and some contains both. When logging in with a specific user, some databases defaults the schema/catalog to the user's namespace, causing the table to not be visible to other users, thus, causing the need to use a "common" namespace. So, depending on the database you are using to back your data, you might want to ignore those settings.

For MySQL, you might want to ignore those settings. This is because the "database" part of the JDBC URL (the one after the last slash) points to the database name, which is semantically identical to schema (for MySQL).

jpkroehling
  • 13,881
  • 1
  • 37
  • 39
  • 10
    Just to complete the picture: in MySQL schemas are not supported and a catalog maps to a database. –  Jun 25 '12 at 06:33
  • @a_horse_with_no_name : You sure? I thought it was the opposite. If you just replace "database" by "schema" in MySQL DDL commands, it should just work. – jpkroehling Jun 25 '12 at 06:35
  • 6
    I'm sure yes. At least that's what the JDBC driver says. `DatabaseMetaData.getCatalogTerm()` returns "Database" and `DatabaseMetaData.getSchemaTerm()` returns null. The various `supportsSchemaInXXX()` methods all return false and the `supportsCatalogInXXX()` all return true. –  Jun 25 '12 at 06:43