Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
есть вот такой абстракт класс

@Entity
@Data
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type",discriminatorType = DiscriminatorType.STRING)
public abstract class Question {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String text;
    @OneToMany(mappedBy = "question")
    private List<Answer> answerList;
    @Enumerated(EnumType.STRING)
    private Difficult difficult;

}


есть его наследник

@Data
@Entity
@DiscriminatorValue("OOP")
public class QuestionOOP extends Question {

}


таблица создается отлично,но вот не могу написать метод ,чтобы сделат выборку по типу

@Repository
 public interface QuestionRepo extends JpaRepository<Question,Long> {
List<Question> findAllByType(String t);
}


ругается на этот метод

Failed to create query for method public abstract java.util.List com.alekseev.Javatesting.Repository.QuestionRepo.findAllByType(java.lang.String)! No property type found for type Question!
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]


хотя в таблице это поле есть и в сущностях описано- не пойму чего ему не хватает
12 сен 19, 12:38    [21969332]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
vas0
Member

Откуда: Таможенный союз (Россия, Казахстан)
Сообщений: 1288
asv79,

скорее всего Discriminator Column не является полем для хибера. Никогда на Spring Data наследование не реализовывал.

раз уж ты полез в извращения то можно добавь свой маппинг и ищи по нему.

    @Column (insertable = false, updatable = false)
    private String type;


Либо попробуй интерфейсы переписывать, под конкретные реализации JpaRepository<QuestionOOP> JpaRepository<QuestionRepo>

Вариантов тьма :) , только нужно найти хоть один рабочий. Ну а лучше spring-data reference почитать, что они пишут насчет схем наследования.
12 сен 19, 12:57    [21969368]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2478
vas0
раз уж ты полез в извращения
+1
12 сен 19, 13:04    [21969374]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
vas0
asv79,

скорее всего Discriminator Column не является полем для хибера. Никогда на Spring Data наследование не реализовывал.

раз уж ты полез в извращения то можно добавь свой маппинг и ищи по нему.

    @Column (insertable = false, updatable = false)
    private String type;


Либо попробуй интерфейсы переписывать, под конкретные реализации JpaRepository<QuestionOOP> JpaRepository<QuestionRepo>

Вариантов тьма :) , только нужно найти хоть один рабочий. Ну а лучше spring-data reference почитать, что они пишут насчет схем наследования.

если делать под каждый класс свою реализацию интерфейса - то теряется смысл наследования)

поле Type -из той же оперы,тогда проще вообще все обьеденить в одну таблицу и вместо наследования добавить какой то enum и по нему уже дергать,что в принципе наверно и будет самым оптимальным решением

но я уверен есть способ дергать и по типу,который мы сами прописваем вот тут @DiscriminatorValue("OOP")
а так по логике у нас же нет поля такого в сущности ,но есть в таблице видимо тут надо действовать

тоесть вот руками если я напишу запрос - он спокойно отрабатывает - потому что физически это поле есть в таблице
а вот как прописать правильный интерфейс-надо думать
12 сен 19, 13:24    [21969407]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
vas0
asv79,



    @Column (insertable = false, updatable = false)
    private String type;


.

интересный вариант ,надо опробовать - сможем ли мы таким образом хибер обмануть)
ведь фатически это поле у нас будет null
12 сен 19, 13:28    [21969416]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2478
asv79
если делать под каждый класс свою реализацию интерфейса - то теряется смысл наследования)
а ООП в модели не нужен.
А далее идут стримы и коллекции.
Ты где там ООП увидел?
12 сен 19, 13:31    [21969421]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
вот эта строчка интересная

No property type found for type Question


Question уже и есть type

хмм
12 сен 19, 13:31    [21969422]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
PetroNotC Sharp
asv79
если делать под каждый класс свою реализацию интерфейса - то теряется смысл наследования)
а ООП в модели не нужен.
А далее идут стримы и коллекции.
Ты где там ООП увидел?

моя задумка проста
я решил написать полноценный веб проект для тестирования джуниор джава

есть класс вопрос
от него наследуются вопрос ООП
вопрос МНогопоточка и тд
я хочу сделать это как одну таблицу,чтобы хибер сам раскидывал вопросы по типам

конечно можно сделать сущность вопрос и поле типа enum ,где прописывать к какой группе вопрос относится
скорей всего если не получится норм описать интерфейс поика по типу ,то я так и сделаю)_
12 сен 19, 13:34    [21969428]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2478
asv79
есть класс вопрос
от него наследуются вопрос ООП
двойка по моделированию предметной области
12 сен 19, 13:37    [21969434]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
PetroNotC Sharp
asv79
есть класс вопрос
от него наследуются вопрос ООП
двойка по моделированию предметной области

это с чего бы это))
12 сен 19, 14:54    [21969539]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2478
asv79,
Моделируют люди не программисты.
Там сущности и отношения.
Прогеры позже приходят и натягивают модель от бизнес аналитика на хибер.
12 сен 19, 15:04    [21969557]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
vas0,
  @Column (insertable = false, updatable = false)
    private String type;


вот этот вариант сработал)
странно я думал все же хибер немного умней и распознает заглушку и выдаст nullPointer

зато все работает теперь так как я и задумал,нужный класс


но я думаю предпочтительней будет сделать Enum поле с типом вопросов,так легче будет в базе сохранять ,иначе мне при создании записи придется каким то образом делать класс определенного типа- что как бы весьма затруднительно будет сделать из формы инпут
как я укажу какой класс я хочу создать QuestionOPP или QuestionTHREAD
а так просто set.ROLE(ROLE.OOP) и мудрить не надо)
12 сен 19, 15:13    [21969568]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
PetroNotC Sharp
asv79,
Моделируют люди не программисты.
Там сущности и отношения.
Прогеры позже приходят и натягивают модель от бизнес аналитика на хибер.

да я принял решение отказаться от наследования в таблах,так как у меня возникнут проблемы при вводе вопросов из админки
так как я при сохранинии буду просто обязан создать экзмепляр конкретного наследника-что автоматом вызывает проблемы)
мне придется прописывать
Question a=new QuestionOOP();
и так для каждого вида
либо делать отдельный контроллер под каждый вид,что в итоге вместо упрощения еще больше код утяжелит

короче сделаю енум ,который будет описывать що це за вопрос и одна общая табла под них)
12 сен 19, 15:21    [21969573]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
vas0
Member

Откуда: Таможенный союз (Россия, Казахстан)
Сообщений: 1288
asv79,

Хибернат использует Discriminator Column при обновлениях, а "лишний" маппинг для type это заглушка для выполнения твоих запросов. По сути ни на что не влияет, так как не участвуют в insert/update-ах.

Если ты будешь json использовать при отправке своих форм, то там тоже есть наследование (по аналогии Discriminator Column). Вообщем вариантов по реализации много. Правильно\неправильно это все субъективно.
12 сен 19, 15:26    [21969575]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
vas0
asv79,

Хибернат использует Discriminator Column при обновлениях, а "лишний" маппинг для type это заглушка для выполнения твоих запросов. По сути ни на что не влияет, так как не участвуют в insert/update-ах.

Если ты будешь json использовать при отправке своих форм, то там тоже есть наследование (по аналогии Discriminator Column). Вообщем вариантов по реализации много. Правильно\неправильно это все субъективно.

вообще хотелось сделать с наследованием,но будут траблы при создании записей как мне из UI указать какого класса этот вопрос
куда как проще сделать енум
взять его валью вывести лист с этими валью в типлейт и тыркнув в нужно приствоится нужный тип)
мне кажется все же так проще ,легковесней и читаемей ,ну и в принципе расширяемост норм-добавил новый тип в енум и автоматом все везде подхватится ,даже в UI
а при наследовании придется интрефейс менять

короче енум ,так енум)
12 сен 19, 15:37    [21969585]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
vas0

Если ты будешь json использовать при отправке своих форм, т

я бы рад,но штмл формы не умееют джейсон отправлять
12 сен 19, 15:41    [21969588]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
забыл ник
Member

Откуда:
Сообщений: 3048
Кто-нибудь понял зачем в ТЗ наследование? Я не про базу сейчас а про сущности
12 сен 19, 16:06    [21969621]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
забыл ник
Кто-нибудь понял зачем в ТЗ наследование? Я не про базу сейчас а про сущности

да по сути не зачем,я убрал уже,заменил на Enum
12 сен 19, 16:10    [21969625]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2478
asv79
забыл ник
Кто-нибудь понял зачем в ТЗ наследование? Я не про базу сейчас а про сущности

да по сути не зачем,я убрал уже,заменил на Enum
бд всегда главнее, а в ней нет наследования. Вот и подстраивайся по нее родимую.
12 сен 19, 16:20    [21969633]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
<#list type as types>
<div>
    <input type="radio" name="${types}" id="${types}"><label>${types}</label>
</div>
</#list>

кто нибудь знает как сделать так чтобы без js в этой конструкции выбиралось только одно значение?э
или в листе это не возможно?
12 сен 19, 17:37    [21969694]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
chpasha
Member

Откуда:
Сообщений: 8596
asv79
кто нибудь знает как сделать так чтобы без js в этой конструкции выбиралось только одно значение?

элементарно - погуглить про <input type=radio/> и быстро обнаружить концепцию "радио-группы" ;)
12 сен 19, 17:55    [21969711]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
chpasha
asv79
кто нибудь знает как сделать так чтобы без js в этой конструкции выбиралось только одно значение?

элементарно - погуглить про <input type=radio/> и быстро обнаружить концепцию "радио-группы" ;)
13 сен 19, 09:25    [21970070]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
PetroNotC Sharp
asv79
пропущено...

да по сути не зачем,я убрал уже,заменил на Enum
бд всегда главнее, а в ней нет наследования. Вот и подстраивайся по нее родимую.

не в данном конкретном случае)тут БД исполняет роль авоськи тоесть круд операции и ничего более
13 сен 19, 09:27    [21970073]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2478
asv79,
Ты еще скажи CRUD байтов)))) LOL.
А у железнодорожников CRUD колесных пар.
Это совсем меняет дело)))
13 сен 19, 09:58    [21970111]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по @DiscriminatorColumn(name="type")  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
PetroNotC Sharp
asv79,
Ты еще скажи CRUD байтов)))) LOL.
А у железнодорожников CRUD колесных пар.
Это совсем меняет дело)))

вам с вадей надо пожениться))вы достали со своими базами)
у меня все прекрасно через хибер и я не собираюсь на таблицу из 2 мб парить себе мозг,потому что там чтобы ты не делал будет производительность ок

причем ладно бы там процесс выборки был какой то экстремально быстрый
это же будет медленно- человек ответил на вопрос-думал минуту-жмакнул кнопку ему новый вопрос с базы вытянулся

тоесть говорить о базе в контексте моего ТЗ просто глубо,так как она лишь картофельный мешок для хрананения картошки и все ее функции заключатся в том чтобы 1 раз принять ворпосы и потом их отдавать ,никаких других операций не предусмотрено )


пс.начинаю понимать наших ПМ,которые ходят и у них волосы дыбом)они разрабу говорят в базе будут лежать текст вопросы,он какую то дичь про байты затирает))))
13 сен 19, 10:13    [21970127]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить