powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с Entitty (JPA) классом
23 сообщений из 23, страница 1 из 1
Помогите с Entitty (JPA) классом
    #38878235
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Есть такой класс.


@Getter
@Setter
@Entity
@Table(name="takenbooks")
public class TakenBooksDomain implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long id;

@Column(name="bookId")
private Long bookId;

@Column(name="readerId")
private Long readerId;

@Column(name="timeBookGot")
private Timestamp timeBookGot;

@Column(name="timeBookReturned")
private Timestamp timeBookReturned;
}

В БД
@Column(name="bookId")
И
@Column(name="readerId")
Являются foreign key на id соответствующих таблиц. Мне бы хотелось в этот класс добавить что-то типа такого
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "bookId", referencedColumnName="id")
private BookDomain book;
Но при запуске вылетает
org.hibernate.MappingException: Repeated column in mapping for entity: library.dao.domain.TakenBooksDomain column: bookId (should be mapped with insert="false" update="false")

Как мне прописать аннотации, чтобы получить здесь ссылку на объект BookDomain, который имеет book.id = bookId (book это таблица с Entity BookDomain)
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38878249
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Всё ж, млять,написано в ошибке. Возьми словарь и переведи.
Когда добавляешь ассоциацию, то
private Long bookId;
нужно удалить. Чтобы одна колонка не мапилась два раза (1 на поле и 1 на ассоциацию)

Либо использовать (insert=false, update=false) как и написано в ошибке, чтобы сделать поле read-only отображением.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38878324
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, спасибо, вот с этой штукой (insert=false, update=false) заработало. Если это оптимальное решение вопроса, то все супер. Удалять Long bookId нельзя. Он много где нужен.

Я просто не пробовал, т. к. хотел как-то более элегантно решить вопрос, напhимер, с чего оно взяло, что хочу иметь 2 колонки bookId . Мне нужна 1 колонка и 1 ссылка на объект, который является записью с сответвтующей id = bookId
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38878333
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотя только что пришло в голову, если у меня в Entity будет BookDomain book, то bookId я могу брать из него. Типа такого.
Может этот вариант лучше, чем первоначальный ?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
@Getter
@Setter
@Entity
@Table(name="takenbooks")
public class TakenBooksDomain implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private Long id;

  // @Column(name="bookId")
  //  private Long bookId;

    @Column(name="readerId")
    private Long readerId;

    @Column(name="timeBookGot")
    private Timestamp timeBookGot;

    @Column(name="timeBookReturned")
    private Timestamp timeBookReturned;

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "bookId", referencedColumnName="id")
            //,  insertable=false, updatable=false)
    private BookDomain book;
}
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38878335
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoМожет этот вариант лучше, чем первоначальный ?

Да, второе поле не нужно. Id всегда можно получить через this.book.id, даже если book ленивое свойство и не загружено.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38878521
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, правда? У меня если поле Lazy, то получить id только при использовании AccessType(Property) получается...
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38878522
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для OneToMany )
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38878718
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmBlazkowicz, правда? У меня если поле Lazy, то получить id только при использовании AccessType(Property) получается...
У хибера тема проксирования постоянно меняется. Я не имел ввиду именно доступ через поле. Хотя если класс инструментировать - не вижу разница. Я имел ввиду лишь саму ассоциацию. При загрузке TakenBooksDomain можно получить bookId через свойство book, не делая выборку самой сущности Book.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38879431
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, хочется услышать ваше авторитетное мнение,

relationParentId property

"Еще одной хорошей, хотя на мой взгляд спорной, идеей является определение полей класса, содержащих значения ключа родительской сущности. Таким образом, мы получаем возможность работать со связанной сущностью не выбирая ее из базы явно. Здесь просто необходим пример в коде"

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public class Entity implements Seializable {     
    @ManyToOne(fetch = FetchType.LAZY, optional = false) 
    @JoinColumn(name = "parentId") 
    private Parent parent;  

    @Column(name = "parentId", insertable = false, udaptable = false) 
    private Long parentId; 
}
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38879498
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть схожий вопрос по тематике.
Есть такой интерфейс

Код: java
1.
2.
3.
4.
public interface TakenBooksRepository extends CrudRepository<TakenBooksDomain, Long> {

    public List<TakenBooksDomain> findTopNumberByTimeBookGotOrderByTimeBookGotAsc(Long number);
}



Я хочу сделать метод, чтобы он доставал из БД последние number к-во записей, отсортированных по столбцу TimeBookGot
Метод тыка и гугления отнял прилично времени.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38879519
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну просто представьте себе, что у нас 10000 записей, зачем они все нужны, если задача составить что-то типа монитора текущей активности.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38879545
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmBlazkowicz, хочется услышать ваше авторитетное мнение,
Тупак, ИМХО. Возможно так нужно делать в какой-то ORM, но все версии Hibernate, с которыми я работал, обходились без этого.
Хибер создаёт прокси на ассоциированый объект и в его id устанавливает Foreign Key текущей сущности, так что ассоциированая остаётся ленивой. Обращение к id не вызывает дозагрузки. А вот чтение других свойств у ленивой ассоциации уже вызывает чтение сущности по id.

Опять же всё зависит и от настроек проксирования. Работа с полями и отказ от CGLIB накладывают свой отпечтаток.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38879546
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какая-то фигня. Я уже почти нашел решение, но оказывается, что одновременно и сортировку и Page делать нельзя.

Есть такой интерфейс, который мне почти помог

Код: java
1.
2.
3.
4.
5.
public interface PagingAndSortingRepository <T, ID extends java.io.Serializable> extends org.springframework.data.repository.CrudRepository<T,ID> {
    java.lang.Iterable<T> findAll(org.springframework.data.domain.Sort sort);

    org.springframework.data.domain.Page<T> findAll(org.springframework.data.domain.Pageable pageable);
}



НО
оказывается, что я могу либо отсортировать, либо получить Number элементов. А мне надо и то и то.

Я бы давно уже сделал нужный мне запрос на native SQL и выполнил его с помощью EntityManager, но мне хочется сделать максимально красиво и по ходу дела разобраться в кк можно большем количестве нюансов.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38879575
Adva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo,

Pageable содержит в себе Sort
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38880078
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AdvaGeronemo,

Pageable содержит в себе Sort

Спасибо, разобрался.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38880281
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача еще немного усложнилась.

Вот такая у нас сущность

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
@Getter
@Setter
@Entity
@Table(name="takenbooks")
public class TakenBooksDomain implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private Long id;

    @Column(name="bookId")
    private Long bookId;

    @Column(name="readerId")
    private Long readerId;

    @Column(name="timeBookGot")
    private Timestamp timeBookGot;

    @Column(name="timeBookReturned")
    private Timestamp timeBookReturned;

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "bookId", referencedColumnName="id",  insertable=false, updatable=false)
    private BookDomain book;
}



У меня есть 2 поля

Код: java
1.
2.
3.
4.
5.
    @Column(name="timeBookGot")
    private Timestamp timeBookGot;

    @Column(name="timeBookReturned")
    private Timestamp timeBookReturned;



которые заполняются так. Товарищ взял книгу на прочтение, в timeBookGot записывается текущее время. А в timeBookReturned остается null, сколь угодно долго, пока товарищ не вернет книгу. И тогда в это поле пишется также текущее время.

Я хочу иметь UI таблицу , например, чтобы выводилось последние 20 книг, которые были взяты или возвращены. Получается же у меня либо одно, либо другое. А мне надо, чтобы где-то было какое-то сравнение timeBookGot и timeBookReturned. Типа, если книга еще не возвращена, то в сортировке участвует поле timeBookGot, если возвращено, то timeBookReturned.

Можно ли тут при чтении из БД завести временную колонку, чтобы она принимала значения
tempTime = ("timeBookReturned" == null ? name="timeBookGot" : "timeBookReturned")
и сортировать уже по ней.

Или какие-то еще хитрый варианты
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38880285
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На данный момент я решил тупо ввести еще одно поле, в которое буду записывать время как взятия, так и возвращения. Но это небольшой изврат, как мне кажется
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38880289
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имел ввиду, что добавил еще одно поле в БД и каждый раз, в него веду запись дополнительной строчкой в Java. Работает.
Но хочется, чтобы было не такое примитивное решение.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38880631
Adva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo,

если ты сам проектируешь классы и схему базы, то на мой взгляд лучше сделать один вариант в качестве прототипа, и после его использования ты сразу увидишь минусы и плюсы. В отсутствие штатного человека, отвечающего за архитектуру можно над каждой буквой долго корпеть и слишком много времени потратить на мелочи.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38880763
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AdvaGeronemo,

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

Согласен. Быть спецом по всем направлениям невозможно. И если у меня что-то не получается сделать оптимально (или близко к нему) за относительно вменяемое время, я делаю некий простой аналог + кидаю вопрос сюда. На мой последний вопрос никто не ответил, значит пусть будет в БД еще одно поле, ничего страшного, это не 5-е колесо у авто.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38880819
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшой оффтоп, у меня тут появилось несколько вопросов. Все чем я тут занимаюсь, это конечно хорошо. Я сам себе потягиваю уровень + могу парочку проектов, где идет активная работа с БД и потоками указать у себя в портфолио, что я так умею.

У меня вопросы по сертификациям. На нескольких собеседованиях мне давали относительно простые задачи, но с подводными камнями. Собеседования я не проходил. И что любопытно, я пару задач оттуда давал своим знакомым java-программистам с очень хорошим опытом, в чей квалификации ни я ни их работодатель не сомневается. Они допускали те же ошибки, что и я.

В общем, я тут подумываю подготовиться и сдать сертификат по Java, в связи есть несколько нюансов
1. Где скачать учебные материалы (я где-то натыкался на обучение за 430$, с учетом 2-ного падения рубля бред полный).
2. Где проходить сертификация - на oracle.com, либо есть какие-то отечественные уважаемые центры.
3. В целом как вы оцениваете КПД подобных мероприятий.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38880835
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo У меня вопросы по сертификациям. На нескольких собеседованиях мне давали относительно простые задачи, но с подводными камнями.
В вопросах официальной сертификации "подводных камней" нет. Всё строго по знаниям.

Geronemo Собеседования я не проходил. И что любопытно, я пару задач оттуда давал своим знакомым java-программистам с очень хорошим опытом, в чей квалификации ни я ни их работодатель не сомневается. Они допускали те же ошибки, что и я.
Субъективно. Покажи пример.

Geronemo1. Где скачать учебные материалы (я где-то натыкался на обучение за 430$, с учетом 2-ного падения рубля бред полный).

Ищите на торрентах страны. Раньше whizlabs делали мега качественные материалы.

Geronemo
2. Где проходить сертификация - на oracle.com, либо есть какие-то отечественные уважаемые центры.

Оракл имеет партнера, который занимается непосредственно сертификацией. У партнера куча точек по крупным и не очень городам.
Ещё надо пообзванивать, поузнавать потому как при цене за экзамер в районе 400, можно купить ваучер за 150, а если ещё и на какую акцию набрести, то и за 100.

Geronemo 3. В целом как вы оцениваете КПД подобных мероприятий.
От подготовки результат отличный. От самой же сертификации, просто приятные воспоминания.
...
Рейтинг: 0 / 0
Помогите с Entitty (JPA) классом
    #38881112
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczСубъективно. Покажи пример..

List list = new ArrayList();
Collection col = list;
list.add("one")
list.add("two")
list.add("three")
list.remove(0);
col.remove(0);

Вопрос, чему равен list.size и col.size
Пока что не надо писать, почему именно такой ответ, вдруг кого-нибудь еще заинтересует.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с Entitty (JPA) классом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]