powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / скала слик
25 сообщений из 52, страница 1 из 3
скала слик
    #39787766
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собссно вопрос.. приходится работать над проектом где заюзан этот чудесный фреймворк.
я до сих пор не пойму это орм или не орм или орм-инвалид. и понимаю что где они в слике через пятку ухо чешут в хибере будет две строчки. ну ладно.

вопрос такой. у меня есть допустим, сущность человек. у него есть ссылка на адрес. человек это таблица с фк адреса. адрес это тоже таблица мне надо вытащить объект вида
class Peep(field:String, field2:String, field3:Option[Address]) -- вроде банально и просто для хибера. но как делать это в слике (нормально) я не понимаю

можно по тупому из дб.ран выдрать через тейблПипКвери джойн тейблАддресКвери сущности вида в трейте (peep, address) потом каким-нибудь маппером их склеить в peepWithAddress но это как то через зад.

ну ок.. даже так.. а если у меня будет трейт из 5-8-10-ти объектов? да это ж бред.
...
Рейтинг: 0 / 0
скала слик
    #39787848
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче нет ) нельзя. слик против. это против их философии. типа выгружай сущности отдельно а потом сам собирай их как-нибудь. угу. красавцы.
...
Рейтинг: 0 / 0
скала слик
    #39788018
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоть код покажи.
...
Рейтинг: 0 / 0
скала слик
    #39788031
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  def whateverMethodFromRepoFindOneByTwoEntities(id: Long, xId: Long) = {
    
val q = entityAQuery.filter(_.id === id).filter(_.xId === xId) joinLeft
       entityBQuery on (_.entityAId === _.id) joinLeft
       entityCQuery on (_._1.entityBId=== _.id) joinLeft
       entityDuery on (_._1._1.entityCId === _.id) joinLeft
       entityEQuery on (_._1._1._1.entityEId === _.id) joinLeft
       entityFQuery on (_._1._1._1._1.entityFId === _.id)
    db.run {
      val r = for {
        (((((entityA, entityB), entityC), entityD), entityE), entityF) <- q
      } yield (entityA, entityB, entityC, entityD, entityE, entityF)
      r.result.headOption
    }
  }



сама сущность выглядит так:

class EntityA(
fieldA:String,
...
fieldZ:String,
entityB:Option[EntityB],
entityC:Option[EntityC],
entityD:Option[EntityD],
entityE:Option[EntityE],
entityF:Option[EntityF],
)
...
Рейтинг: 0 / 0
скала слик
    #39788033
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю что это. Но этот код ужасен.
...
Рейтинг: 0 / 0
скала слик
    #39788043
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да. он очень ужасен. в хибере это одна строчка. а тут гамно какое то.
...
Рейтинг: 0 / 0
скала слик
    #39788044
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы (имена изменены) если по неймингу претензии. хотя думаю нет.
...
Рейтинг: 0 / 0
скала слик
    #39788047
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я очень уважаю Scala. Но этот код - unsupportable. Как его читать? Как вносить изменения?
Где бизнес сущности? Что это за нелепое нагромождение подчеркиваний?

Подозреваю что данный запрос на целевом DSL(SQL) был бы красив и компактен.

Скала конечно это тот еще универсал. Но иногда ребята перегибают палку. Хотел-бы
я понят мотивации к писанию такого.
...
Рейтинг: 0 / 0
скала слик
    #39788048
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ очень уважаю Scala. Но этот код - unsupportable. Как его читать? Как вносить изменения?
Где бизнес сущности? Что это за нелепое нагромождение подчеркиваний?

Подозреваю что данный запрос на целевом DSL(SQL) был бы красив и компактен.

Скала конечно это тот еще универсал. Но иногда ребята перегибают палку. Хотел-бы
я понят мотивации к писанию такого.

по-моему andreykaT тупо тролит... я вот беру хибернейт, и у меня просто нереально бомбит от того, как в нем сделаны некоторые, не особо популярные места
...
Рейтинг: 0 / 0
скала слик
    #39788049
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ очень уважаю Scala. Но этот код - unsupportable. Как его читать? Как вносить изменения?
Где бизнес сущности? Что это за нелепое нагромождение подчеркиваний?

Подозреваю что данный запрос на целевом DSL(SQL) был бы красив и компактен.

Скала конечно это тот еще универсал. Но иногда ребята перегибают палку. Хотел-бы
я понят мотивации к писанию такого.

я не нашел способа в слике вытащить одним запросом сущность и все ее нестед поля-сущности. кроме того сам слик говорит вот что:

авторThe problem is that this hard-codes that a Person requires an Address. It cannot be loaded without it. This doesn’t fit to Slick’s philosophy of giving you fine-grained control over what you load exactly. With Slick it is advised to map one table to a tuple or case class without them having object references to related objects. Instead you can write a function that joins two tables and returns them as a tuple or association case class instance, providing an association externally, not strongly tied one of the classes.
т.е. они считают это НОРМАЛЬНЫМ. можно переложить тапель на сущность. это чуть улучшит картинку но всё-равно говно. еще прям везде читается если тебе такая конструкция понадобилась то ты делаешь что-то не так.

а да. еще в слике ограничение на 24 поля. говно вдвойне. они считают что в таблице не может быть больше полей чем полей в скаловском тапле? они это серьезно?
...
Рейтинг: 0 / 0
скала слик
    #39788051
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловmaytonЯ очень уважаю Scala. Но этот код - unsupportable. Как его читать? Как вносить изменения?
Где бизнес сущности? Что это за нелепое нагромождение подчеркиваний?

Подозреваю что данный запрос на целевом DSL(SQL) был бы красив и компактен.

Скала конечно это тот еще универсал. Но иногда ребята перегибают палку. Хотел-бы
я понят мотивации к писанию такого.

по-моему andreykaT тупо тролит... я вот беру хибернейт, и у меня просто нереально бомбит от того, как в нем сделаны некоторые, не особо популярные места
и что в хибере не так? у тебя сущность а с 3-4-мя нестед сущностями у тебя будет запрос в РОВНО ОДНУ СТРОЧКУ записанный кемелкейсом в интерфейсе. даже аннотаций не надо. и тебе вылетет сущность со всеми нестедами внутри.
...
Рейтинг: 0 / 0
скала слик
    #39788052
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Java Tuples в реализации https://howtodoinjava.com/java/basics/java-tuples/ разрешено 10 сущностей в тупле.
Да фигня это всё. По хорошему если тебе надо нечто больше чем Pair - бери создавай сущность. Или чухай в Lisp.

Зачем сову сношать глобусом?
...
Рейтинг: 0 / 0
скала слик
    #39788054
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а да если что код не мой но я хочу его отрефачить.
...
Рейтинг: 0 / 0
скала слик
    #39788055
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ Java Tuples в реализации https://howtodoinjava.com/java/basics/java-tuples/ разрешено 10 сущностей в тупле.
Да фигня это всё. По хорошему если тебе надо нечто больше чем Pair - бери создавай сущность. Или чухай в Lisp.

Зачем сову сношать глобусом?
ты можешь его сделать так: .map(EntityWithNestedEntityFields.tupled) - и он у тебя соберет всё в одну сущность.. но тебе же это надо писать и всё-равно у тебя в какой-то момент времени будет вылетать колбаса из тупла с объектами.
...
Рейтинг: 0 / 0
скала слик
    #39788060
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTа да если что код не мой но я хочу его отрефачить.
А покажи стандартный туториал по Слику где описано как это делать православно?
...
Рейтинг: 0 / 0
скала слик
    #39788064
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://slick.lightbend.com/doc/3.2.0/orm-to-slick.html
Код: java
1.
2.
3.
4.
5.
val tupledJoin: Query[(People,Addresses),(Person,Address), Seq]
      = people join addresses on (_.addressId === _.id)

case class PersonWithAddress(person: Person, address: Address)
val caseClassJoinResults = db.run(tupledJoin.result).map(_.map(PersonWithAddress.tupled))



ну в общем, сверху это вполне по-сликовски православно )) просто у них нет примеров с мультиджойнами ))
...
Рейтинг: 0 / 0
скала слик
    #39788065
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... туториал нормален. Там нет такого code-mess...

Похорони мультиджойны. Замени на банальный native-SQL.
...
Рейтинг: 0 / 0
скала слик
    #39788067
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема нативскуэля в том что если у тебя доменная модель поменяется допустим, ты банально увидишь что у тебя что то сломалось только когда тестами гонять будешь. если они вообще у тебя будут и будут покрывать этот кейс. поэтому хотелось бы оставить дсл.
...
Рейтинг: 0 / 0
скала слик
    #39788068
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTи что в хибере не так?
впечатление такое, что куда не плюнь - везде какие-то грабли находятся.
andreykaTу тебя сущность а с 3-4-мя нестед сущностями у тебя будет запрос в РОВНО ОДНУ СТРОЧКУ записанный кемелкейсом в интерфейсе. даже аннотаций не надо. и тебе вылетет сущность со всеми нестедами внутри.Насколько я помню, вышеупомянутый пример от скалы можно выполнить только в хибере 5.1 и более поздних версиях ( Entity joins (or ad hoc joins) ) - кажется несколько странным что вроде как разумная фича появилась сравнительно недавно... а вот в JPA Criteria API так сделать до сих пор нельзя - нужно в сущностях прописывать маппинг, а после этого начинается неполовая ##ля с тем, что имбецилы из redhatхибернейт считает себя самым умным и начинает все эти сущности из маппинга на каждый чих тянуть из базы, собственно если захочется в хибере подкрутить производительность до уровня "я так вижу", то будет уйма незабываемых впечатлений.
...
Рейтинг: 0 / 0
скала слик
    #39788069
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу... туториал нормален. Там нет такого code-mess...

потому что там нет примеров где джойна больше 1 а так и я могу
...
Рейтинг: 0 / 0
скала слик
    #39788070
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловandreykaTи что в хибере не так?
впечатление такое, что куда не плюнь - везде какие-то грабли находятся.
andreykaTу тебя сущность а с 3-4-мя нестед сущностями у тебя будет запрос в РОВНО ОДНУ СТРОЧКУ записанный кемелкейсом в интерфейсе. даже аннотаций не надо. и тебе вылетет сущность со всеми нестедами внутри.Насколько я помню, вышеупомянутый пример от скалы можно выполнить только в хибере 5.1 и более поздних версиях ( Entity joins (or ad hoc joins) ) - кажется несколько странным что вроде как разумная фича появилась сравнительно недавно... а вот в JPA Criteria API так сделать до сих пор нельзя - нужно в сущностях прописывать маппинг, а после этого начинается неполовая ##ля с тем, что имбецилы из redhatхибернейт считает себя самым умным и начинает все эти сущности из маппинга на каждый чих тянуть из базы, собственно если захочется в хибере подкрутить производительность до уровня "я так вижу", то будет уйма незабываемых впечатлений.
юзай проекции. они тебя спасут. если тебе не нравится что хибер что-то лишнее на твой взгляд вытягивает.

но вот в слике банальное персона с адресом уже не вытащить нормально
...
Рейтинг: 0 / 0
скала слик
    #39788074
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTпроблема нативскуэля в том что если у тебя доменная модель поменяется допустим, ты банально увидишь что у тебя что то сломалось только когда тестами гонять будешь. если они вообще у тебя будут и будут покрывать этот кейс. поэтому хотелось бы оставить дсл.
Выкрутился
...
Рейтинг: 0 / 0
скала слик
    #39788077
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTюзай проекции. они тебя спасут. если тебе не нравится что хибер что-то лишнее на твой взгляд вытягивает.

Ничем оно не поможет. Вот сущность:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class Entity {

	@Id
	@Column("SURROGATE_KEY")
	protected Long id;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "NATURAL_KEY_REF", referencedColumnName = "NATURAL_KEY")
	private Other other;

}



там FetchType.LAZY работать никогда не будет, потому что так устроен хибернейт. Предлагаю дальше тему не развивать, поскольку примеров масса и хибернейт - это УГ, факт.
...
Рейтинг: 0 / 0
скала слик
    #39788082
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и пусть. тебе жалко чтоле? лейзи опасны на списках. а на единичных нестедах да пофиг у тебя скорее ботлнек случится где угодно но не тут.

в общем возвращаясь к слику.. это как-то можно улучшить? )
...
Рейтинг: 0 / 0
скала слик
    #39788084
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*т.е. не лейзи а отсутствите лейзи - и.е. игеры опасны на списках. на полях с одной сущностью игеры фигня.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / скала слик
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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