我有一个OneToMany从电影到所有语言版本实体 我想也有一个manyToOne朝着原始版本。 该版本包含一个布尔值orginal = true,以将版本限制为唯一具有属性original = true的版本。 所以我尝试一个Forumla限制版本: @JoinFormula(值= “(SELECT v.id FROM persistence.model.Version v,其中v.film.id = ID和v.original为true) 但是生成时在SQL,休眠前缀与film0_真正所以它不工作(在SQL你fiml0_.true) 这里是代码:@JoinFormula为什么hibernate前缀布尔值?
@Entity
public class Film implements Serializable {
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
private String title;
@OneToMany(mappedBy = "film")
private Set<Version> versions = new HashSet<Version>();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumnsOrFormulas(@JoinColumnOrFormula(formula =
@JoinFormula(value =
"(SELECT v.id FROM persistence.model.Version v WHERE v.film.id = id AND v.original is true)",
referencedColumnName = "id")) })
private Version originalVersion;
...
}
@Entity
public class Version implements Serializable {
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
private String language;
private boolean original;
@ManyToOne
private Film film;
...
}
的问题是,Hibernate的前缀“真”字,其电影别名(film0_)生成SQL时,为什么? 我怎么能摆脱那个?
select film0_.id as id1_0_0_, etc ...
_ from Film film0_
left outer join Version version1_ on
(SELECT v.id FROM persistence.model.Version v
WHERE v.film.id = film0_.id AND v.original is film0_.true)=version1_.id
当然film0_.true不是一个列,我怎么能告诉Hibernate,在这种情况下,真是一个文字?
无关,但为什么将它映射为ManyToOne?原始版本是唯一一部电影的原始版本,不是吗?你试过'='真'吗?它似乎与PostgreSQL一起工作良好,我猜Hibernate不会在表名中加一个文字字符串。 –