@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 маперы

Странник Тостера, укажи мне путь на мануал истинный, и да прибудет с тобой сила!
И моя благодарность :)
  • Вопрос задан
  • 231 просмотр
Решения вопроса 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
Седой и строгий
Просто используйте аннотации.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Libertex Group Барнаул
от 90 000 до 120 000 руб.
от 70 000 до 130 000 руб.
XCritical Software Санкт-Петербург
от 150 000 до 220 000 руб.