在连接表示例中,休眠带有额外列的多对多关联



我有3个表作为@Entity,在我的spring + hibernate应用程序中有2个连接表。在一个连接表,我有额外的列。我想从这个信息列获取信息时,我从我的主表获取信息。主表代码:

@Entity
@Table(name = "items")
public class Items {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "crafts"
,joinColumns = @JoinColumn(name = "item_id")
,inverseJoinColumns = @JoinColumn(name = "plot_id"))
private Set<Plots> plotInfo = new HashSet<>();
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "item_materials"
,joinColumns = @JoinColumn(name = "item_id")
,inverseJoinColumns = @JoinColumn(name = "material_id"))
private Set<Materials> materialsInfo = new HashSet<>();

表item_materials有如下列:id, item_id(fkey), material_id(fkey), expense"其中一个名字是"开支"我需要在我的最终结果中。我怎么能编码我的类有"费用";在我的结果?

我读了@embeddable,但仍然不明白如何在我的项目中使用

不要使用@ManyToMany关联。将连接表映射为实体并对其建模,如下所示:

@Entity
@Table(name = "items")
public class Items {
@OneToMany(mappedBy = "item")
private Set<Crafts> plotInfo = new HashSet<>();
}
@Entity
@Table(name = "plots")
public class Plots {
@OneToMany(mappedBy = "plot")
private Set<Crafts> items = new HashSet<>();
}
@Entity
@Table(name = "crafts")
public class Crafts {
@EmbeddedId
private CraftsId id;
@ManyToOne
@JoinColumn(name = "item_id", insertable = false, updatable = false)
private Items item;
@ManyToOne
@JoinColumn(name = "plot_id", insertable = false, updatable = false)
private Plots plot;
}
@Embeddable
public class CraftsId {
@Column(name = "item_id")
private Integer itemId;
@Column(name = "plot_id")
private Integer plotId;
// equals + hashCode
}

最新更新