Ответы пользователя по тегу Hibernate
  • Как решить проблему с подключением spring-Репозиториев?

    @guras256
    у тебя spring data, нафига ты писал hql запрос?
    public interface RoomRepository extends JpaRepository<Room, Integer> {
        Room findByIndex(String index);
    }

    все что тебе нужно сделать, если в Room правильно расставлены аннотации
    и да, назови поле Index с маленькой буквы...
    Ответ написан
  • Как добавить в БД (hibernate) элемент с внешним ключом без выборки для него объекта (по id)?

    @guras256
    "легального" способа я не знаю и вряд ли он есть. смысл Jpa в том, что ты работаешь в объектной модели, а не с sql запросами.
    ты можешь присылать запрос с фронтенда в виде:
    {
      "name": "some name",
      "a": {
        "id": 1
      }
    }

    и все будет хорошо работать

    так же рекомендую сделать связь unidirectional, то есть поместить в A
    @JsonIgnore
        @OneToMany(mappedBy = "a")
        private List<BEntity> bs;


    в общем зависит от целей и необходимостей.
    Если ты хочешь получать именно id, то ты просто используешь инструмент не по назначению, бери myBatis и пиши sql.

    А если хочешь упороться, поставь transient поле в класс BEntity и перекладывай из него в AEntity -_- :
    @Entity
    @Table(name = "b")
    public class BEntity {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @ManyToOne
        @JoinColumn(name = "a_id", nullable = false)
        @JsonIgnore
        private AEntity a;
    
        @Transient
        private Long aEntityId;
    
        @Column(name = "name", nullable = false)
        private String name;
    }
    
    // получаешь ответ с фронденда:
    BEntity b = getBEntity();
    // Создаешь AEntity
    AEntity a = new AEntity();
    // запихиваешь в нее нужный id из транзаент поля
    a.setId(b.getAEntityId());
    //засовываешь А в Б
    b.setA(a);
    // можно сохранять


    но это вариант из разряда идиотизма

    в общем спрашивай, если будут еще вопросы
    Ответ написан
    5 комментариев