Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Java |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
asv79 Member Откуда: Тверь Сообщений: 3090 |
есть вот такой абстракт класс@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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7706 |
|
||
12 сен 19, 13:04 [21969374] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
если делать под каждый класс свою реализацию интерфейса - то теряется смысл наследования) поле Type -из той же оперы,тогда проще вообще все обьеденить в одну таблицу и вместо наследования добавить какой то enum и по нему уже дергать,что в принципе наверно и будет самым оптимальным решением но я уверен есть способ дергать и по типу,который мы сами прописваем вот тут @DiscriminatorValue("OOP") а так по логике у нас же нет поля такого в сущности ,но есть в таблице видимо тут надо действовать тоесть вот руками если я напишу запрос - он спокойно отрабатывает - потому что физически это поле есть в таблице а вот как прописать правильный интерфейс-надо думать |
||
12 сен 19, 13:24 [21969407] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
интересный вариант ,надо опробовать - сможем ли мы таким образом хибер обмануть) ведь фатически это поле у нас будет null |
||
12 сен 19, 13:28 [21969416] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7706 |
А далее идут стримы и коллекции. Ты где там ООП увидел? |
||
12 сен 19, 13:31 [21969421] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
вот эта строчка интересная No property type found for type Question Question уже и есть type хмм |
12 сен 19, 13:31 [21969422] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
моя задумка проста я решил написать полноценный веб проект для тестирования джуниор джава есть класс вопрос от него наследуются вопрос ООП вопрос МНогопоточка и тд я хочу сделать это как одну таблицу,чтобы хибер сам раскидывал вопросы по типам конечно можно сделать сущность вопрос и поле типа enum ,где прописывать к какой группе вопрос относится скорей всего если не получится норм описать интерфейс поика по типу ,то я так и сделаю)_ |
||||
12 сен 19, 13:34 [21969428] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7706 |
|
||
12 сен 19, 13:37 [21969434] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
это с чего бы это)) |
||||
12 сен 19, 14:54 [21969539] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7706 |
asv79, Моделируют люди не программисты. Там сущности и отношения. Прогеры позже приходят и натягивают модель от бизнес аналитика на хибер. |
12 сен 19, 15:04 [21969557] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
vas0,@Column (insertable = false, updatable = false) private String type; вот этот вариант сработал) странно я думал все же хибер немного умней и распознает заглушку и выдаст nullPointer зато все работает теперь так как я и задумал,нужный класс но я думаю предпочтительней будет сделать Enum поле с типом вопросов,так легче будет в базе сохранять ,иначе мне при создании записи придется каким то образом делать класс определенного типа- что как бы весьма затруднительно будет сделать из формы инпут как я укажу какой класс я хочу создать QuestionOPP или QuestionTHREAD а так просто set.ROLE(ROLE.OOP) и мудрить не надо) |
12 сен 19, 15:13 [21969568] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
да я принял решение отказаться от наследования в таблах,так как у меня возникнут проблемы при вводе вопросов из админки так как я при сохранинии буду просто обязан создать экзмепляр конкретного наследника-что автоматом вызывает проблемы) мне придется прописывать Question a=new QuestionOOP(); и так для каждого вида либо делать отдельный контроллер под каждый вид,что в итоге вместо упрощения еще больше код утяжелит короче сделаю енум ,который будет описывать що це за вопрос и одна общая табла под них) |
||
12 сен 19, 15:21 [21969573] Ответить | Цитировать Сообщить модератору |
vas0 Member Откуда: Таможенный союз (Россия, Казахстан) Сообщений: 1288 |
asv79, Хибернат использует Discriminator Column при обновлениях, а "лишний" маппинг для type это заглушка для выполнения твоих запросов. По сути ни на что не влияет, так как не участвуют в insert/update-ах. Если ты будешь json использовать при отправке своих форм, то там тоже есть наследование (по аналогии Discriminator Column). Вообщем вариантов по реализации много. Правильно\неправильно это все субъективно. |
12 сен 19, 15:26 [21969575] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
вообще хотелось сделать с наследованием,но будут траблы при создании записей как мне из UI указать какого класса этот вопрос куда как проще сделать енум взять его валью вывести лист с этими валью в типлейт и тыркнув в нужно приствоится нужный тип) мне кажется все же так проще ,легковесней и читаемей ,ну и в принципе расширяемост норм-добавил новый тип в енум и автоматом все везде подхватится ,даже в UI а при наследовании придется интрефейс менять короче енум ,так енум) |
||
12 сен 19, 15:37 [21969585] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
я бы рад,но штмл формы не умееют джейсон отправлять |
||
12 сен 19, 15:41 [21969588] Ответить | Цитировать Сообщить модератору |
забыл ник Member Откуда: Сообщений: 3514 |
Кто-нибудь понял зачем в ТЗ наследование? Я не про базу сейчас а про сущности |
12 сен 19, 16:06 [21969621] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
да по сути не зачем,я убрал уже,заменил на Enum |
||
12 сен 19, 16:10 [21969625] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7706 |
|
||||
12 сен 19, 16:20 [21969633] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
<#list type as types> <div> <input type="radio" name="${types}" id="${types}"><label>${types}</label> </div> </#list> кто нибудь знает как сделать так чтобы без js в этой конструкции выбиралось только одно значение?э или в листе это не возможно? |
12 сен 19, 17:37 [21969694] Ответить | Цитировать Сообщить модератору |
chpasha Member Откуда: Сообщений: 10423 |
элементарно - погуглить про <input type=radio/> и быстро обнаружить концепцию "радио-группы" ;) |
||
12 сен 19, 17:55 [21969711] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
|
||||
13 сен 19, 09:25 [21970070] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
не в данном конкретном случае)тут БД исполняет роль авоськи тоесть круд операции и ничего более |
||||
13 сен 19, 09:27 [21970073] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7706 |
asv79, Ты еще скажи CRUD байтов)))) LOL. А у железнодорожников CRUD колесных пар. Это совсем меняет дело))) |
13 сен 19, 09:58 [21970111] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
вам с вадей надо пожениться))вы достали со своими базами) у меня все прекрасно через хибер и я не собираюсь на таблицу из 2 мб парить себе мозг,потому что там чтобы ты не делал будет производительность ок причем ладно бы там процесс выборки был какой то экстремально быстрый это же будет медленно- человек ответил на вопрос-думал минуту-жмакнул кнопку ему новый вопрос с базы вытянулся тоесть говорить о базе в контексте моего ТЗ просто глубо,так как она лишь картофельный мешок для хрананения картошки и все ее функции заключатся в том чтобы 1 раз принять ворпосы и потом их отдавать ,никаких других операций не предусмотрено ) пс.начинаю понимать наших ПМ,которые ходят и у них волосы дыбом)они разрабу говорят в базе будут лежать текст вопросы,он какую то дичь про байты затирает)))) |
||
13 сен 19, 10:13 [21970127] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Java | ![]() |