Неправильный запрос, сгенерированный аннотацией @OrderBy - PullRequest
1 голос
/ 18 октября 2010

Я использую Hibernate3, и у меня есть объект со следующей коллекцией:

@ManyToMany  
@JoinTable(name = "buys_publishers", joinColumns=@JoinColumn(name="buy_id", referencedColumnName = "buy_id"), inverseJoinColumns=@JoinColumn(name = "publisher_id", referencedColumnName = "publisher_id"))  
@OrderBy("name")  
private List<Publisher> publishers;

(выборочное и каскадное замедления опущены)

Целевой объект (издатель) наследуется от объекта, которыйсодержит атрибут "name", для которого активирован @orderby.

здесь целевая сущность:

@Entity
@Table(name="publishers")
@PrimaryKeyJoinColumn(name="account_id")
public class Publisher extends Account{

   /**
    * 
    */
   private static final long serialVersionUID = 1L;

   @Column(name = "publisher_id")
   private Long publisherId;

   public Long getPublisherId() {
      return publisherId;
   }

   public void setPublisherId(Long publisherId) {
      this.publisherId = publisherId;
   }


}

и суперкласс:

@Entity
@Table(name="accounts")
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Account implements Serializable{

   /**
    * 
    */
   private static final long serialVersionUID = 1L;


   @Id
   @Column(name="id",unique=true, nullable=false )
   @GeneratedValue( strategy = IDENTITY )
   private long id;

   @Column(name = "name")
   private String name;

   @Column(name = "account_type")
   @Enumerated(EnumType.ORDINAL)
   private AccountType accountType;

   public long getId() {
      return id;
   }

   public void setId(long id) {
      this.id = id;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public AccountType getAccountType() {
      return accountType;
   }

   public void setAccountType(AccountType accountType) {
      this.accountType = accountType;
   }

}

запрос, который генерирует Hibernate:

select publishers0_.buy_id as buy1_1_, publishers0_.publisher_id as publisher2_1_, publisher1_.account_id as id6_0_, publisher1_1_.account_type as account2_6_0_, publisher1_1_.name as name6_0_, publisher1_.publisher_id as publisher1_18_0_ from buys_publishers publishers0_ left outer join publishers publisher1_ on publishers0_.publisher_id=publisher1_.publisher_id left outer join accounts publisher1_1_ on publisher1_.account_id=publisher1_1_.id where publishers0_.buy_id=? order by accounts.name asc

из запроса ясно, что порядок должен быть на publisher1_1_, я что-то не так делаю или это ошибка?

Спасибо.

1 Ответ

2 голосов
/ 18 октября 2010

Это похоже на HHH-4260 - @OrderBy не работает с унаследованными свойствами (и я не ожидал бы краткосрочного разрешения).

...