Выбивает постоянно исключение UnknownEntityTypeException, то есть не различает сущности почему то, перепробовал много, пока застрял..
Вот сам класс сущности:
import jakarta.persistence.*;
@Entity
@Table(name="clients_table", schema="test_clients")
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private Integer id;
@Column(name="name")
private String name;
@Column(name="email")
private String email;
@Column(name="phone")
private String phone;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
Класс для подключения и работы в БД:
import com.javarush.lectures.rest_example.model.Client;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.query.Query;
import java.util.List;
import java.util.Properties;
public class ClientHibernateManager {
private SessionFactory sessionFactory;
public void init() {
Properties properties = new Properties();
properties.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver");
properties.put(Environment.URL, "jdbc:mysql://localhost:3306/test_clients");
properties.put(Environment.USER, "root");
properties.put(Environment.PASS, "parol");
this.sessionFactory = new Configuration()
.setProperties(properties)
.buildSessionFactory();
}
public List<Client> getAllClients() {
try (Session session = sessionFactory.openSession()) {
Query<Client> query = session.createQuery("from Client", Client.class);
return query.list();
}
}
public boolean saveUser(Client client) {
try (Session session = sessionFactory.openSession()) {
Transaction transaction = session.beginTransaction();
session.persist(client);
transaction.commit();
return true;
}
catch(Exception e) {
e.printStackTrace();
return false;
}
}
}
И метод main:
ClientHibernateManager clientHibernateManager = new ClientHibernateManager();
clientHibernateManager.init();
List<Client> clients1 = clientHibernateManager.getAllClients();
for (Client client2 : clients1) {
System.out.println(String.format("%d - %s - %s - %s",
client2.getId(), client2.getName(), client2.getEmail(), client2.getPhone()));
}
Client client3 = new Client();
client3.setId(3);
client3.setName("KimChenUn");
client3.setEmail("kimchen789@gmail.com");
client3.setPhone("+38(037)999-11-54");
System.out.println(clientHibernateManager.saveUser(client3));
Не срабатывает как попытка получить из таблицы список клиентов, так и туда добавить.
При этом на самом сервере, все это есть, все соответствует, таблица и колонки совпадают.
id name email phone
'1', 'Name1', 'name111@gmail.com', '+38(073)123-54-89'
'2', 'Incognito', 'hhh34@gmail.com', '+38(099)444-55-77'
И. Ж.
41 уровень
Попытка подключения к базе данных через Hibernate. (Только начал разбираться, перелопатил интернет, пока хз как разрешить..)
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
6 мая, 19:04
В базе айдишки точно интовые? Не строчные? Покажи DDL
0
И. Ж.
6 мая, 19:34
Да именно так
0
Денис Enterprise Java Developer
6 мая, 20:34решение
Закинь куда ни будь весь код я попинаю. Ну или депенденси которые используешь в проекте.
У тебя явные проблемы в конфигурации, или коннектишься не туда или не так это делаешь, или Энтити не так настроена... без полного кода, конкретных версий зависимостей и нормальных логов это сложно угадать :)
Еще вот такая штука интересует hibernate.cfg.xml
В целом запустить мне эту штуку удалось, чем именно не скажу, но вот пара изменений:
Чтобы заработал сейв мне пришлось заменить persist на merge
Но не гарантирую что у тебя это заведётся, все таки я это вслепую писал почти :) +3
И. Ж.
7 мая, 11:53
Благодарю Друг, все заработало! Я вносил изменения по кусочку из представленного кода. Вначале я добавил addAnnotatedClass(Client.class), после чего с базой соединилось и вывело данные. Метод saveUser не работал все еще, тут мешала аннотация @GeneratedValue(strategy = GenerationType.AUTO), поскольку я явно указываю id вызовом client3.setId(3), а тут произвольная генерация, убрал пока аннотацию. В итоге у меня сработали все три метода, проверил каждый: merge, save и persist. До настроек конфигурации в итоге не дошел, не пришлось менять.
Зависимости все, уже так для интереса:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.3</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.5.0.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.4.7.Final</version>
</dependency>
0
И. Ж.
7 мая, 11:54
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.29.0-GA</version>
</dependency>
+1
Денис Enterprise Java Developer
7 мая, 12:21полезный
Ну и славно что заработало ) Меня твоя генерация айдишек тоже слегка удивила, но ее решил не трогать для большего соответствия твоим условиям ) Успехов в освоении. Вообще на реальных проектах сейчас все сильно проще по работе с базой, много рутины на себя перетянул спринг, но познакомиться с потрохами тоже не лишним будет. Так-то там под капотом тот же хибернейт )
+1
И. Ж.
7 мая, 12:58
Спасибо большое! Главное было для начала заставить это все запуститься, дальше буду уже прикручивать куда то, фантазировать с чем то реальным)
0