Информация об изменениях

Сообщение Re[16]: В России опять напишут новый объектно-ориентированны от 19.03.2018 20:31

Изменено 19.03.2018 20:34 LaPerouse

Re[16]: В России опять напишут новый объектно-ориентированны
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, LaPerouse, Вы писали:


LP>>Оказывают, если уметь пользоваться их возможностями. Не имея опыта использования современной ORM (в .net этому опыту взяться неоткуда), весьма неосмотрительно делать такие выводы.

S>Убедительные примеры будут?

Спрашивай.

LP>>Закат солнца вручную будет у тебя, когда ты будешь вручную разруливать идентити объектов, перекладываю их руками из таблицы.

S>Чегось?
LP>>ОРМ не делает никакой магии — просто избавляет программиста от рутины написания тысячного по счету однотипного кода перекладывания данных из реляционной модели в объектно-ориентированную.
S>Эмм, я пока знаю только одну такую "ORM". Это — linq2sql. Он ровно перекладывает данные. Есть кто-то ещё, без change tracking и lazy load?

Hibernate, eclipselink — две самые распространенные java-orm, при желании там можно этого добиться, только зачем?

LP>>Как решается эта проблема в plain-sql? Пишется запрос. Как решается эта же проблема в orm? Сюрприз — пишется запрос. Просто во втором случае у нас объектно-ориентированный язык запросов с готовым графом объектов на выходе, без необходимости организовывать тысячный по счету закат солнца руками.

S>Убедительные примеры будут?
S>Покажите, во что на "объектно-ориентированном языке запросов" у нас переписывается plain sql:
S>
S>select c.Id, c.CityName, sum(o.TotalAmount) as totalSales from 
S>  city c inner join customers cs on cs.cityId = c.Id
S>  inner join orders o on o.customerId = cs.Id
S>  where o.status = 'SHIPPED'
S>  group by c.ID, c.RegionID, c.CityName
S>  having c.RegionID = @RegionID
S>


На объектно-ориентированном языке запросов JPQL это делается элементарно, красиво, и лаконично, и без всяких убогих cs.cityId=c.Id
(эта информация сидит в описании класса и реализации jpa берет ее оттуда, как и любое другое описание):

select city.id, city.name, sum(o.totalAmount)
from Order o
join o.customer customer
join customer.city city
where o.status='SHIPPED'
group by city.id, city.regionId, city.name
having city.regionId=:regionId

S>И какого типа будет возвращаемое значение.


Какого хочешь. Проще всего так:

List<Object[]> result = em.createQuery(query, Object[].class).getResultList();

Но можно подсунуть любой класс или хештаблицу.
Re[16]: В России опять напишут новый объектно-ориентированны
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, LaPerouse, Вы писали:


LP>>Оказывают, если уметь пользоваться их возможностями. Не имея опыта использования современной ORM (в .net этому опыту взяться неоткуда), весьма неосмотрительно делать такие выводы.

S>Убедительные примеры будут?

Спрашивай.

LP>>Закат солнца вручную будет у тебя, когда ты будешь вручную разруливать идентити объектов, перекладываю их руками из таблицы.

S>Чегось?
LP>>ОРМ не делает никакой магии — просто избавляет программиста от рутины написания тысячного по счету однотипного кода перекладывания данных из реляционной модели в объектно-ориентированную.
S>Эмм, я пока знаю только одну такую "ORM". Это — linq2sql. Он ровно перекладывает данные. Есть кто-то ещё, без change tracking и lazy load?

Hibernate, eclipselink — две самые распространенные java-orm, при желании там можно этого добиться, только зачем?

LP>>Как решается эта проблема в plain-sql? Пишется запрос. Как решается эта же проблема в orm? Сюрприз — пишется запрос. Просто во втором случае у нас объектно-ориентированный язык запросов с готовым графом объектов на выходе, без необходимости организовывать тысячный по счету закат солнца руками.

S>Убедительные примеры будут?
S>Покажите, во что на "объектно-ориентированном языке запросов" у нас переписывается plain sql:
S>
S>select c.Id, c.CityName, sum(o.TotalAmount) as totalSales from 
S>  city c inner join customers cs on cs.cityId = c.Id
S>  inner join orders o on o.customerId = cs.Id
S>  where o.status = 'SHIPPED'
S>  group by c.ID, c.RegionID, c.CityName
S>  having c.RegionID = @RegionID
S>


На объектно-ориентированном языке запросов JPQL это делается элементарно, красиво, и лаконично, и без всяких убогих cs.cityId=c.Id
(эта информация сидит в описании класса и реализации jpa берет ее оттуда, как и любое другое описание):

select city.id, city.name, sum(o.totalAmount)
from Order o
join o.customer customer
join customer.city city
where o.status='SHIPPED'
group by city.id, city.regionId, city.name
having city.regionId=:regionId


S>И какого типа будет возвращаемое значение.


Какого хочешь. Проще всего так:

List<Object[]> result = em.createQuery(query, Object[].class).getResultList();


Но можно подсунуть любой класс или хештаблицу.