Tabelle aus schema.sql wir dniocht gefunden

8u3631984

Bekanntes Mitglied
HAllo zusammen.
Wie im Titel schon zu lesen bekomme ich folgende Exception :
Java:
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Tabelle "employeeProfile" nicht gefunden (m÷gliche Kandidaten: "EMPLOYEEPROFILE")
Table "employeeProfile" not found (candidates are: "EMPLOYEEPROFILE"); SQL statement:
INSERT INTO "employeeProfile" ("EMPLOYEE", "PASSWORD", "USERNAME") VALUES (?, ?, ?)

Hier ist meine Application KLasse :
Java:
public class SpringDataJdbcApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringDataJdbcApplication.class, args);
    }

    @Bean
    ApplicationRunner demo(EmployeeRepository repository) {

        return args -> {

            var employee = repository.save(new Employee(null, "Employee A", new Profile(null, "username", "password")));
            repository.findAll().forEach(System.out::println);
        };

    }
}

@Table(name = "employeeProfile")
record Profile(@Id Integer id, String username, String password) {
}

record Employee(@Id Integer id, String name, Profile profile) {
}

interface EmployeeRepository extends ListCrudRepository<Employee, Integer> {

}

Und hier meine schema.sql
SQL:
CREATE TABLE employee (
    id integer  generated by default as identity primary key,
    name text
);

CREATE TABLE employeeProfile(
    id integer  generated by default as identity primary key,
    employee bigint not null references employee(id),
    username text,
    password text
)

HAt jemand eine Idee warum die TAbellle nicht gefunden wird `?
 

8u3631984

Bekanntes Mitglied
Ohman. Manachmal hat man echt Tomaten auf den Augen. Ich dachte ich hätte das schon probiert. Aber nun klappt es wenn ich sowohl im sql schema als auch in der Annotaion den Namen groß schreibe

Danke für die Hilfe
 

looparda

Top Contributor
Mit DATABASE_TO_UPPER=false lässt es sich auch konfigurieren:
z.B. per spring.datasource.url Property
Java:
spring.datasource.url=jdbc:h2:file:./db/database;DB_CLOSE_ON_EXIT=TRUE;DATABASE_TO_UPPER=false
 

Oneixee5

Top Contributor
In Datenbanken(-Programmierung) verwendet man kein camelCase: "employeeProfile", man verwendet "snake_case": "employee_profile". Wobei man die Bezeichner von Datenbankobjekten meistens klein schreibt und alles was zur Syntax gehört groß. Die Konventionen werden aber nicht so streng gehandhabt wie z.B.: in Java.
SQL:
CREATE TABLE employee_profile
  (
    ...
Wenn man sich daran hält, dann fällt es anderen oft leichter den Code zu lesen.
 

ExceptionOfExpectation

Aktives Mitglied
In Datenbanken(-Programmierung) verwendet man kein camelCase: "employeeProfile", man verwendet "snake_case": "employee_profile". Wobei man die Bezeichner von Datenbankobjekten meistens klein schreibt und alles was zur Syntax gehört groß. Die Konventionen werden aber nicht so streng gehandhabt wie z.B.: in Java.
SQL:
CREATE TABLE employee_profile
  (
    ...
Wenn man sich daran hält, dann fällt es anderen oft leichter den Code zu lesen.
Also beim PostrgreSql ist Groß-Kleinschreibung egal. Solange du nicht den Bindestrich verwendest, stattdessen Unterstrich.
 

mihe7

Top Contributor
Also beim PostrgreSql ist Groß-Kleinschreibung egal. Solange du nicht den Bindestrich verwendest, stattdessen Unterstrich.
Deswegen nutzt man in der Regel in Datenbanken ja auch kein CamelCase, sondern den Unterstrich 😀

Aber ganz so einfach ist es nicht: es gibt delimited identifier, also solche, die z. B. in Anführungszeichen gesetzt werden. Die sind lt. SQL-Standard case sensitive. Leider verhalten sich auch die DBs recht unterschiedlich, wenn es um gewöhnliche Identifier geht.
 

Oneixee5

Top Contributor
Also beim PostrgreSql ist Groß-Kleinschreibung egal. Solange du nicht den Bindestrich verwendest, stattdessen Unterstrich.
Bei den meisten DB's ist das eigentlich egal, es sei denn man hat spezielle Einstellungen oder es gibt einen Bezug zum OS. Man sollte das aber vermeiden. Dafür wurden Konventionen auch erschaffen. Diese sollen auch ermöglichen, dass man Code möglichst einfach weitergeben kann.
 

mrBrown

Super-Moderator
Mitarbeiter
Also beim PostrgreSql ist Groß-Kleinschreibung egal. Solange du nicht den Bindestrich verwendest, stattdessen Unterstrich.
Nur so halb, es werden sind einfach alle Namen ohne Anführungszeichen als Lowercase interpretiert, alle Namen in Anführungszeichgen allerdings nicht, dahr: Hallo_Welt == HALLO_WELT == "hallo_welt" != "HALLO_WELT"
 

Neue Themen


Oben