- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在hibernate java类中的Mysql表之间建立外键一对一关系。
数据库:
表1:
Id int PK
name varchar(10) NN
表2:
Id int PK
name varchar(10) NN
tabe1Id int FK
代码:
JavaClass1
@Entity
@Table(name="table1")
public class table1{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="Id")
private int Id;
@Column(name="name")
private String name;
}
JavaClass2
@Entity
@Table(name="table2")
public class table2{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="Id")
private int Id;
@Column(name="name")
private String name;
@Id
@Column(name="table1Id")
private int JavaClass1Id;
}
这样写就够了吗?将 JavaClass1Id 作为整数存储在 JavaClass2 中,而不在 hibernate 中与另一个类建立关系?
最佳答案
正如人们已经指出的那样,您正在寻找 @OneToOne
和 JPA 指南。这是对此的基本方法:
类表1:
@Entity
@Table(name="table1")
public class table1{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="Id")
private int Id;
@Column(name="name")
private String name;
// omitting constructors, getters, setters, toString, etc.
}
类表2:
@Entity
@Table(name="table2")
public class table2{
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="Id")
private int Id;
@Column(name="name")
private String name;
@OneToOne // using default values for db schema
private table1 t1; // notice how you have an actual reference to your object
// omitting constructors, getters, setters, toString, etc.
}
演示:
public void demo() {
table1 t1 = new table1("my table1 object");
t1 = t1Repo.save(t1);
table2 t2 = new table2("my table2 object", t1);
t2 = t2Repo.save(t2);
for (table2 t : t2Repo.findAll()) {
log.info("retrieved t2 object " + t);
}
}
打印:
retrieved t2 object table2{Id=1, name='my table2 object', t1=table1{Id=1, name='my table1 object'}}
这是相应的 MySQL 的样子:
MariaDB [so41334487]> show tables;
+----------------------+
| Tables_in_so41334487 |
+----------------------+
| table1 |
| table2 |
+----------------------+
2 rows in set (0.00 sec)
MariaDB [so41334487]> describe table1;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.06 sec)
MariaDB [so41334487]> describe table2;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| t1_id | int(11) | YES | MUL | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
MariaDB [so41334487]> select * from table1;
+----+------------------+
| id | name |
+----+------------------+
| 1 | my table1 object |
+----+------------------+
1 row in set (0.00 sec)
MariaDB [so41334487]> select * from table2;
+----+------------------+-------+
| id | name | t1_id |
+----+------------------+-------+
| 1 | my table2 object | 1 |
+----+------------------+-------+
1 row in set (0.00 sec)
这是从 SHOW CREATE TABLE table2
中提取的相应 CREATE
语句:
CREATE TABLE `table2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`t1_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK30i46miycdu2aqony71wj8kva` (`t1_id`),
CONSTRAINT `FK30i46miycdu2aqony71wj8kva` FOREIGN KEY (`t1_id`) REFERENCES `table1` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
那里有很多高质量的内容,包括关于 @OneToOne
的书籍和视频讲座以及相应的陷阱,但是如果您正在寻找快速提示,您可以开始 in the WikiBook on JavaPersistence 。另请记住,如果您在(一系列)对象之间创建循环引用,则链接 FetchType.EAGER 可能会导致您将整个数据库加载到内存中。
关于java - 在 hibernate 中仅将属性设置为外键 int 就足够了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41334487/
对于我的问题,我找不到更好的措辞。 在我的应用程序中的某个时刻,我设置了一些非常密集的动画。问题是,在高端设备上,动画运行流畅且赏心悦目。另一方面,我测试过的一台低端设备在制作动画时表现非常糟糕。 试
我正在修补 OTP 模块 ( yubico_pam ),并尝试访问管理员选择的控制标志(例如必需,足够, ETC)。 有什么想法吗?这是否可行(无需解析文件)? 最佳答案 无法在 API 中查询此信息
我有一些为 Linux 编写的 C 代码,依赖于套接字和 arpa/inet.h 以及 libusb.h,我想在 MinGW 下为 Windows 编译它。 (请注意,当前项目只有一个非常简单的 Ma
我是一名优秀的程序员,十分优秀!