gpt4 book ai didi

java - 在 Hibernate 实体中合并表的字段

转载 作者:行者123 更新时间:2023-11-29 11:54:42 25 4
gpt4 key购买 nike

我目前正在开发一个系统,用户可以在其个人资料中添加任意数量的技能,并为每个技能分配一个评级,以显示他们的能力有多先进。系统还允许他们添加描述。

这些是我的数据库表。技能的名称可以是编程语言或其他相关事物。

这是一个带有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com