1. Java / Говнокод #14418

    +66

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    @NamedQuery(
        		name = "ImageBankTag.findAllTags",
        		query = "select distinct tag from AdTag tag where tag.tag in (:tags) order by tag.tag"
        )
    })
    
    @Data
    @Entity
    @Table(name = "image_bank_tags",uniqueConstraints = {@UniqueConstraint(columnNames={"tag"})})
    public class ImageBankTag implements Serializable{
    
    . . .
    
        @NamedQuery(
        		name = "AdTag.findAllTags",
        		query = "select distinct tag from AdTag tag where tag.tag in (:tags) order by tag.tag"
        )
    })
    
    @Data
    @Entity
    @Table(name = "admanager2_tags",uniqueConstraints = {@UniqueConstraint(columnNames={"tag"})})
    public class AdTag implements Serializable{

    Такой вот своеобразный джоин, с подстраховкой.

    Запостил: wvxvw, 26 Января 2014

    Комментарии (12) RSS

    • да нет, обычная выборка по тегам.

      хм, а вот аннотацию @Data впервые встречаю...
      Ответить
      • Нет, не обычная, а с изюминкой: теги обйъявлены с юник констрейном - их совсем не нужно было еще раз distinct`ом обрабатывать.
        Но гораздо большая печаль этот Х.куэль: он такое зло заставляет создавать, что глядя на него нельзя не прослезиться. Например, чего только стоят джоины реализованые через where in (list of things from another table) - потому что временную таблицу не создать.
        Вот нахера они изнасиловали Сиквел? Я не то, чтобы особый почитатель, но они ж его просто с говном смешали...

        PS. @Data - из lombok это то же самое, что @Getter @Setter во все поля.
        Ответить
        • ну, все ж, это не реляционный запрос.
          а так да, генеренный скюл обычно ад адом получается.
          Ответить
        • и да. посмотрел я этот lombok - на первый взгляд ересь еще та.

          хотя, это сумасшествие сродни тому, что я делаю на Тапестри - аннотацийно-ориентированное программирование.
          Ответить
          • Пока что самая идиотская аннотация, которую я встречал, это @Valid - такое впечатление, что человеку, который ее придумал сначала удалили большую часть часть правого полушария мозга, а потом долго натравливали на Ява-программистов (я все чаще вспоминаю фильм Куб, когда смотрю на исходники Явы).
            Но вот, увы, нет подходящего для гк. экземпляра: просто никто до конца не дошел, чтобы ее воплотить, все мои предшественники здались где-то на 2/3 пути.
            Ответить
            • > самая идиотская аннотация, которую я встречал, это @Valid
              А что она делает?
              Ответить
              • Неявно вызывает какой-нибудь валидатор. При чем какой-нибудь в самом прямом смысле слова. Нужный валидатор нельзя явно указать.
                Предполагается, что для того, чтобы реализовать эту аннотацию нужно:
                1. Создать класс реализующий какой-то интерфейс валидатора.
                2. В этом классе нужно реализовать метод по типу "а может ли этот класс быть вообще применим к этим объектам".
                3. Если эта херня используется как аннотация к аргументу метода, метод обязан принимать дополнительный аргумент, в который складываются ошибки валидации.

                Самое забавное начинается когда один и тот же объект может быть валидным в зависимости от контекста, в котором он используется, или когда нужна валидация нескольких аргументов, и не понятно где чьи ошибки ну и даже если заставить это работать, то предугадать какой же из валидаторов будет использоваться, если их есть более одного может оказаться очень нетривиально... И тем не менее, это какой-то говенный жабостандарт, а не просто злобный гений одного кретина. Самое сердце интырпрайза, так сказать.
                Ответить
                • Ниосилятор jsr-303 детектед. @Valid явно указывает валидатору, что поля объекта, помеченного данной аннотацией также нужно провалидировать. А конкретные валидаторы указываются для каждого поля объекта при помощи специальных аннотаций, например http://docs.oracle.com/javaee/6/api/javax/validation/constraints/package-summary.html
                  Ответить
                  • Авотхуй. Рассмотрим следующий конкретный пример:
                    @RequestMapping(value = "upload", method = RequestMethod.POST)
                    	public @ResponseBody
                    	String uploadImage(@Valid @RequestParam("file") MultipartFile image)
                    			throws ApiException {

                    Расскажи мне, знаток жыср, как ты отличишь тут валидатор файлов картинок от валидатора файлов Микрософт Иксель?
                    Ответить
                    • Так не объект валидируется, а его поля, отмеченные аннотациями и в зависимости от аннотаций будут вызваны соответствующие валидаторы. А этот пример - ересь.
                      Ответить
                      • Ну так валидация по полям нахер вообще не нужна: это ж не мой объект, мне туда вовнутрь аннотации никак уже не добавить, да и там она все равно работать не будет: если я не знаю, в каком контексте используется класс, как мне, например, указать, что мне зипкод нужен американский или канадский?

                        Я говорю про:
                        http://stackoverflow.com/questions/12146298

                        второй пример (с реализацией org.springframework.validation.Validator ).
                        Ответить
                        • Ну и @javax.validation.Valid тут нахер не сдался, он для другого. Пиши свою аннотацию валидации, помеченную аннотацией @Constraint(validatedBy = …class), описывающую критерии валидности и цепляй к ней реализацию валидатора. Если уж spring кушает @Valid, то я думаю и остальные плюшки jsr303 поддерживает, хотя для меня спринг зверь неведомый.

                          И канаццкие зипкоды тоже не проблема при описании валидации в классе аннотациями, если валидатор над классом.
                          Ответить

    Добавить комментарий