Hibernate 6 Сгенерирован неверный запрос

У меня есть следующие классы

      @Entity
@Table(name = "users")
public class User extends BaseEntity implements Serializable {

..

    @OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE, CascadeType.PERSIST }, mappedBy = "entity")
    private Set<UserUdfValue> properties = new HashSet<>();

..

}

@Entity
@DiscriminatorValue(UserUdfValue.UDFID)
public class UserUdfValue extends ValueBase {

    private static final long serialVersionUID = -898152830344556386L;

    public final static String UDFID = "1";

    @ManyToOne(fetch=FetchType.LAZY, cascade = {})
    @JoinColumn(name = "entity_id", nullable = false)
    private User entity;

    public User getEntity() {
        return entity;
    }

    public void setEntity(User entity) {
        this.entity = entity;
    }

}


@Entity(name = "udf_value")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "target_type", discriminatorType = DiscriminatorType.INTEGER)
@DiscriminatorOptions(force = false)
public abstract class ValueBase implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
...

}

До перехода на спящий режим 6 (спящий режим 5.6) при запросе пользователя по идентификатору он генерировал запрос sql, как я ожидаю.

      SELECT *
FROM users user0_
LEFT OUTER JOIN udf_value properties14_ ON user0_.id = properties14_.entity_id
    AND properties14_.target_type = 1
WHERE user0_.id = ?

Однако с hibernate 6 критерии дискриминатора больше не в соединении, а в предложении where.

      SELECT *
FROM users u1_0
LEFT JOIN udf_value p2_0 ON u1_0.id = p2_0.entity_id
WHERE p2_0.target_type = 1
    AND u1_0.id = ?

Что, очевидно, не дает мне того же результата, которого я ожидаю

РЕДАКТИРОВАТЬ: это было признано ошибкой в ​​спящем режиме https://discourse.hibernate.org/t/hibernate-6-wrong-query-generated-with-distributorvalue/6984/3 .

0 ответов

Другие вопросы по тегам