我目前正在开发一个系统,用户可以在其个人资料中添加任意数量的技能,并为每个技能分配一个评级,以显示他们的能力有多先进。系统还允许他们添加描述。
这些是我的数据库表。技能的名称可以是编程语言或其他相关事物。
这是一个带有 Hibernate 的 Spring MVC 项目。 Skill_user 表中的 ID 是其他两个表的外键。一个用户可以拥有 0-* 个技能,并且一个技能可以分配给 0-* 个用户。
用户
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| id | smallint(6) | NO | PRI | NULL | auto_increment |
| email | varchar(75) | NO | | NULL | |
| password | varchar(64) | NO | | NULL | |
| permission | tinyint(4) | NO | | 1 | |
| verified | tinyint(1) | NO | | 0 | |
| blocked | tinyint(1) | NO | | 0 | |
+------------+-------------+------+-----+---------+----------------+
技能
+-----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+----------------+
| id | smallint(6) | NO | PRI | NULL | auto_increment |
| name | varchar(45) | NO | | NULL | |
+-----------------+-------------+------+-----+---------+----------------+
技能用户
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| user_id | smallint(6) | NO | PRI | NULL | |
| skill_id | smallint(6) | NO | PRI | NULL | |
| rating | tinyint(1) | NO | | NULL | |
| descripton | varchar(250) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
请注意,除了外键之外,skill_user 还有许多字段。
现在,我想要一个 Java 类作为 Hibernate 的模型,但不想为 Skill_user 创建单独的模型。这将使我能够管理用户类的技能,理想情况下我的用户类具有以下方法:
void addSkill(Skill s)
Set<Skill> getSkills()
void setSkills(Set<Skill> s)
技能模型中将提供评级和描述的 getter 和 setter 。
希望我的解释很清楚,并且感谢对此的任何帮助。
预先感谢您的回答,请询问是否需要更多信息。
最佳答案
您应该在 Skill.hbm.xml 中创建一个连接表来执行此任务。下面我提到了一种解决方案。
Skill.java
public class Skill implements java.io.Serializable {
private Integer id;
private String name;
//defining a set of users
private Set<User> users = new HashSet<>();
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
public Skill() {
}
public Skill(String name) {
this.name = name;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Skill.hbm.xml
<hibernate-mapping>
<class name="your_package_name.Skill" table="skill" catalog="skillDB" optimistic-lock="version">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="45" not-null="true" />
</property>
<!--join table will automatically created by this...-->
<set name="users" table="skill_user" cascade="save-update">
<key column="skill_id"/>
<many-to-many class="your_package_name.User" column="user_id"/>
</set>
</class>
</hibernate-mapping>
Perform Inserting data to the DB :
Session s = util.HibernateUtil.getSessionFactory().openSession();
s.beginTransaction();
User u = new User("johndoe@gmail.com","123456",true,true,true);
s.save(u);
Skill skill = new Skill("Programmer");
skill.getUsers().add(u);
s.save(skill);
s.getTransaction().commit();
关于java - 在 Hibernate 实体中合并表的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33415273/