繁体   English   中英

在Hibernate中的联接表上为OneToMany列表映射创建OrderColumn

[英]Creating OrderColumn for OneToMany list mapping on a join table in Hibernate

我有一个productJob表和一个quadrat表。 每个样方可以在很多安装productJobproductJob可以有1到4 quadrats相同或不同种类的! 我有兴趣在产品作业中保持Quadrat安装的顺序。 例如第一,第二,第三或第四名! 但是以下映射不会在JoinTable telai_quadrati上创建订单列。 我的映射有什么问题? 无论如何都不会创建orderColumn!

@Entity
@Table(name = "telai")
public class ProductJob implements IProductJob, IProductJobProcessing{
     @Embedded private QuadratGroup quadrateGroup = new QuadratGroup();
}

@Embeddable
public class QuadratGroup implements Serializable{
     @OneToMany(targetEntity = Quadrat.class, cascade = CascadeType.ALL)
     @JoinTable(
        name = "telai_quadrati", 
        joinColumns = {@JoinColumn(name = "dbId", table = "telai")}, 
        inverseJoinColumns = {@JoinColumn(name = "id", table = "quadrati")})
     //@OrderColumn(name = "order")
     @IndexColumn(name = "order")
     public List<Quadrat> getQuadratList(){ //return an ordered list of the quadrats with at most 4 elements}

很明显,对于四边形,不存在任何顺序,因此我使用set!

@Entity
@Table(name = "quadrati")
public class Quadrat implements IQuadrat, Cloneable, Serializable{
    @ManyToMany
    @JoinTable(
        name = "telai_quadrati",
        joinColumns = @JoinColumn(name = "id", table = "quadrati"),
        inverseJoinColumns = @JoinColumn(name = "dbId", table = "telai"))
    private Set<ProductJob> productJobs;

如果我使用属性访问而不管方法访问,它都可以工作! 像这样:

@OneToMany(targetEntity = Quadrat.class, cascade = CascadeType.ALL)
//@MapKeyJoinColumn(name="indice" , table = "telai_quadrati")
@JoinTable(
        name = "telai_quadrati", 
        joinColumns = {@JoinColumn(name = "telaio_id", table = "telai")}, 
        inverseJoinColumns = {@JoinColumn(name = "quadrato_id", table = "quadrati")})
@OrderColumn(name = "indice")
private List<Quadrat> quadratList;

但是我想知道为什么它不能与方法访问一起使用,这迫使我在项目中进行大量重构! :(

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM