我 对 Spring 、 JPA 、 JPARepository 概念 等 还 不 熟悉 。
规则 如下 :一 个 用户 通过 比赛 只能 赢得 一 辆 汽车 , 但 汽车 可以 被 许多 用户 赢得 ( 例如 , 用户 Juan 赢得 了 一 辆 丰田 , 用户 Maria 赢得 了 一 辆 福特 , 但 用户 Jaime 也 赢得 了 一 辆 丰田 , 等等 ) 。
我 有 一 个 表 " users " 和 另 一 个 表 " cars " , 在 数据 库 中 , 表 cars 中 已经 有 数据 了 。
汽车 表 :
----------------------
| id_car | brand |
----------------------
| 1 | Toyota |
----------------------
| 2 | Ford |
----------------------
| 3 | Honda |
----------------------
中 的 每 一 个
用户 表 结构 :
---------------------------
| id_user | name | id_car |
---------------------------
格式
在 Java 代码 中 , 实体 将 以 这种 方式 声明 ;
载 具 :
@Entity
@Table(name="cars")
public class Car {
@Id
@Getter
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column("id_car")
private int idAuto;
@Getter
@Setter
private String brand;
}
格式
用户 名 :
@Entity
@Table(name="users")
public class User {
@Id
@Getter
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column("id_user")
private int idUser;
@Getter
@Setter
private String name;
// private int idCar; ???
}
格式
如何 将 用户 与 汽车 链接 起来 ? 如果 我 将 OneToOne
, JoinColumn(name="id_car")
声明 给 一 个 属性 , 该 属性 返回 并 分配 用户 实体 中 Car 类型 的 对象 , 即 :
@Getter
@Setter
private Car car;
格式
我 如何 告诉 存储 库 或 实体 我 只 想 将 一 个 新 用户 加入 到 DB 中 已经 存在 的 汽车 中 , 因为 要 声明 我 之前 提到 的 这个 属性 , 我 必须 为 它 分配 一 个 Car 类型 的 Object 。
user.setCar(new car("Toyota"));
格式
或者 :
Car car = repositoryFindById(2);
user.setCar(car);
格式
我 不 想 加入 一 辆 新车 , 因为 id 为 1 的 车 已经 存在 , 我 只 想 加入 它 , * * 我 不 想 创建 两 个 事务 ( findById
和 save
) * * , 我 如何 执行 以下 操作 :
user.setCar(1); // pass only the car id.
格式
是否 有 任何 方法 可以 实现 这 一 点 ? 或 * * 正确 的 方法 是 什么 ? * *
2条答案
按热度按时间iyr7buue1#
我相信您可以使用@Query注解并编写一个本地查询,我们在工作中使用Hibernate JPA,并且也有连接表,但是如果您要从可以通过Map连接的数据中查找特定信息,则需要一个本地自定义查询。
此外,您不需要CRUD存储库接口,当查询很简单时,它很有用,但您希望获得的数据越具体,就越需要编写自己的SQL或使用Hibernate查询语言。
因此,您可以采取以下几种方式:
1.使用@Query注解并编写您自己的本机查询
@Query(value = "SELECT * FROM table WHERE column like %info% ", nativeQuery = true) List<AnEntity> getEntity(@Param("info") String info);
1.插入EntityManager并使用createNativeQuery方法
1.还有Hibernate Criteria api,基本上可以用java Package sql,并使用一些难以理解的方法进行自定义查询。
31moq8wy2#
你可以得到一个汽车的参考而不需要像这样访问数据库
如果数据库中没有id=1的关联Car,则在持久化用户时将抛出异常