有没有办法在Hibernate中使用连接表建立多对多关系,该连接表使用连接表中的列来确定项目是否属于关系?
此外,是否可以通过连接表中的键(而不是目标表中的键)指定相关项的顺序?
我们说我有User和TVShow表,以及UserShow连接表。我希望我的用户有多种类别的节目(比如说,"有线""广播和#34;)。定义这个的一种方法是添加一个"类别int"列到UserShow连接表,然后连接查询可以有一个WHERE子句,指定哪个类别。我没有在@JoinTable或@JoinColumn注释中看到任何可以让我对加入进行限定的内容。
同样对于排序,UserShow连接表有一个"序列int"列,指定用户显示的顺序。 @OrderBy的所有示例都建议使用目标表列。
编辑:
以下是我建议的表格:
create table User
(
mId integer auto_increment primary key not null,
);
create table TVShow
(
mId integer auto_increment primary key not null,
mName varchar(128) not null,
);
create table UserShow
(
mId integer auto_increment primary key not null,
mUserId integer not null,
mShowId integer not null,
mCategory integer default 0,
mSequence integer default 0,
constraint cUserShowUser foreign key (mUserId) references User(mId),
constraint cUserShowShow foreign key (mShowId) references TVShow(mId)
);
我希望能够以mSequence顺序为mCategory = 1获取用户的所有TVShows,并以mSequence顺序单独获取mCategory = 2的用户的所有TVShows。
User.java:
@Entity
@Table
@Proxy(lazy = true)
public
class
User implements java.io.Serializable
{
public Long getId() { return mId; }
public void setId(Long inVal) { mId = inVal; }
public List<TVShow> getShows() { return mShows; }
public void setShows(List<TVShow> inVal) { mShows = inVal; }
public void addShow(TVShow inShow) { getShows().add(inShow); }
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long mId;
@OneToMany(cascade = {})
@JoinTable(name = "UserShow",
joinColumns = @JoinColumn(name = "mUserId"),
inverseJoinColumns = @JoinColumn(name = "mShowId"))
@OrderBy("mName asc")
private List<TVShow> mShows;
private static Logger sLogger = Logger.getLogger(User.class);
}
TVShow.java:
@Entity
@Table
@Proxy(lazy = true)
public
class
TVShow implements java.io.Serializable
{
public Long getId() { return mId; }
public void setId(Long inVal) { mId = inVal; }
public String getName() { return mName; }
public void setName(String inVal) { mName = inVal; }
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long mId;
private static Logger sLogger = Logger.getLogger(TVShow.class);
}