@DmitryPros

Java как наконец запустить Hibernate?

Всем привет, уже прочел кучу туториалов по Hibernate 5 и везде какой-то бойлерплейт, я отказываюсь верить, что в 2018 году нужно создавать кучу .xml файлов для описания каждой Entity и конфигурации самого Hibernate. (Может быть для генерации xml есть какие-то библиотки?)

Нашел такой вариант (из оф. доков):
Configuration cfg = new Configuration()
                .setProperty("hibernate.connection.driver_class", "org.postgresql.Driver")
                .setProperty("hibernate.connection.url", "jdbc:postgresql://localhost:5432/indicators_value")
                .setProperty("hibernate.connection.username", "postgres")
                ...
                .setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL95Dialect")
                .setProperty("hibernate.connection.datasource", "java:com/driver/db/entity")
                .setProperty("hibernate.order_updates", "true")
                .addClass(MyClass.class);


Который, вроде бы, и долже заменить кучу этих xml файлов, но вот такая проблема:
org.hibernate.boot.MappingNotFoundException: Mapping (RESOURCE) not found : com/driver/db/entity/MyClass.hbm.xml

Т.е. он все равно требует эти файлы.

Конфигурирую и делаю запрос так:
Session session = cfg.configure().buildSessionFactory().openSession();

        session.beginTransaction();
        String sql = "select version()";

        String result = (String) session.createNativeQuery(sql).getSingleResult();
        System.out.println(result);

        session.getTransaction().commit();
        session.close();


Но ошибка вылетает раньше, на строке .addClass(MyClass.class);

Основной вопрос такого рода: Как сконфигурировать Hibernate максимально просто? И что бы не было нужны при каждом новом Entity создавать xml маперы

Странник Тостера, укажи мне путь на мануал истинный, и да прибудет с тобой сила!
И моя благодарность :)
  • Вопрос задан
  • 370 просмотров
Решения вопроса 2
Conacry
@Conacry
Здравствуйте.

Для начала Вам необходимо иметь аннотированный класс, связанный с сущностью в базе данных. Для примера приведу из своего проекта:

@Entity
@Table(name = "users")
public class User implements Serializable {

    @Id
    @Column(name = "user_id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
                    generator = "users_user_id_seq")
    @SequenceGenerator(name = "users_user_id_seq",
                       sequenceName = "users_user_id_seq",
                       allocationSize = 1)
    private long userId;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "login", nullable = false, unique = true)
    private String login;

    @Column(name = "password", nullable = false)
    private String password;

    @Column(name = "email", nullable = false, unique = true)
    private String email;

    @Column(name = "enabled", nullable = false)
    private boolean isEnabled;

    @Column(name = "reg_date", nullable = false)
    private Date regDate;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "authority_id", nullable = false)
    private Authority authority;

    public long getUserId() {
        return userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    @JsonIgnore
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public boolean isEnabled() {
        return isEnabled;
    }

    public void setEnabled(boolean enabled) {
        isEnabled = enabled;
    }

    @JsonSerialize(using = SqlDateSerializer.class)
    public Date getRegDate() {
        return regDate;
    }

    public void setRegDate(Date regDate) {
        this.regDate = regDate;
    }

    public Authority getAuthority() {
        return authority;
    }

    public void setAuthority(Authority authority) {
        this.authority = authority;
    }

    @Override
    public String toString() {

        return  "User details" +
                "Id = " + getUserId() + "\n" +
                "Name = " + getName() + "\n" +
                "Login = " + getLogin() + "\n" +
                "Email = " + getEmail() + "\n" +
                "Enabled = " + isEnabled() + "\n" +
                "Role = " + getAuthority().getAuthority().name() + "\n" +
                "Registration date = " + getRegDate();
    }


Если Вам будут непонятны какие-либо вещи из класса сущности, напишите в комментарии, я отвечу.

Далее при конфигурировании Hibernate вам нужно указывать не .addClass(MyClass.class), а configuration.addAnnotatedClass(Main.class).
Ответ написан
@DmitryPros Автор вопроса
Решил проблему, изучив пример в репозитории: https://github.com/bytestree/spring4-hibernate5-example

Это самый актуальный для 2018 года вариант, прямо то, что искал. Никаких xml не используется все автоматически.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
Просто используйте аннотации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Crystal Service Integration Санкт-Петербург
от 100 000 до 200 000 ₽
НПЦ «САПСАН» Москва
от 80 000 до 120 000 ₽
ЛАНИТ Москва
от 200 000 ₽
18 февр. 2020, в 23:53
8000 руб./за проект
18 февр. 2020, в 22:14
10000 руб./за проект