我是Spring Data的新手,并试图通过关注这篇关于SO和其他一些教程的帖子来解决这个问题,但没有取得太大成功。
我正在尝试在 2 个表之间使用 Spring Data JPA 进行简单的连接。数据库中的表称为: * user_vehicle -
user_vehicle表中数据库中的当前数据:
ID|vehicle_ID|user_ID
1|1|1
2|2|1
这是我尝试过但无法让它工作的代码(getter 和 setter 从帖子中删除以缩短它):
@Entity(name = "vehicle_model")
public class VehicleModel {
@Id
@Min(1)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long manufacturerId;
private String title;
private int ccm;
private int kw;
private int yearOfManufacture;
private int engineTypeId;
private boolean isActive;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "vehicle_id", insertable = false, updatable = false)
@Fetch(FetchMode.JOIN)
private UserVehicle userVehicle;
}
@Entity(name = "user_vehicle")
public class UserVehicle {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false)
private long vehicleId;
@Column(nullable = false)
private long userId;
@OneToMany(targetEntity = VehicleModel.class, mappedBy = "userVehicle", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
List<VehicleModel> vehicleModels;
}
@Repository
public interface UserVehicleRepository extends CrudRepository<UserVehicle, Long>
{
Iterable<UserVehicle> findVehicleModelsByUserId(Long userId);
}
我希望在填充vehicle_model数据的可迭代中得到2个结果。相反,我得到了2个结果,但是对于车辆模型属性,我得到了“无法计算表达式方法抛出的'org.hibernate.exception.SQLGramar异常'异常”
以下是控制台的输出:
这是执行我有意想要的操作的解决方案 - 根据user_vehicle表中的user_id搜索车辆:
@Entity(name = "user_vehicle")
public class UserVehicle {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private boolean isActive;
private long userId;
@ManyToOne
@JoinColumn(name = "vehicle_id")
private Vehicle vehicle;
@Entity(name = "vehicle_model")
public class Vehicle {
@Id
@Min(1)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long manufacturerId;
private String title;
private int ccm;
private int kw;
private int yearOfManufacture;
private int engineTypeId;
private boolean isActive;
@OneToMany(mappedBy = "vehicle")
private Set<UserVehicle> userVehicles;
@Repository
public interface UserVehicleRepository extends CrudRepository<UserVehicle, Long> {
Iterable<UserVehicle> findVehicleModelsByUserId(Long userId);
User类实际上根本没有使用:
@Entity(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private String firstName;
private String lastName;
private boolean isActive;
现在这是一种一对一的关系,并且正在做我第一次真正想要的事情。
希望它能帮助某人
在这里找到了解决方案:https://www.baeldung.com/jpa-many-to-many
我一直在寻找它有点错误,因为这是一个多对多的关系。我的想法是转到“中间”表,选择所有vehicle_iduserId=: id和从vehicle_ids列表中获取每辆车的详细信息。
以下是有效的正确实现:
@Entity(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private String firstName;
private String lastName;
private boolean isActive;
@OneToMany(mappedBy = "user")
private Set<UserVehicle> userVehicles;
@Entity(name = "user_vehicle")
public class UserVehicle {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private boolean isActive;
@ManyToOne
@JoinColumn(name = "vehicle_id")
private Vehicle vehicle;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@Entity(name = "vehicle_model")
public class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long manufacturerId;
private String title;
private int ccm;
private int kw;
private int yearOfManufacture;
private int engineTypeId;
private boolean isActive;
@OneToMany(mappedBy = "vehicle")
private Set<UserVehicle> userVehicles;
最后,在存储库接口中我有一个这样的方法:
public interface UserVehicleRepository extends CrudRepository<UserVehicle, Long> {
Iterable<UserVehicle> findVehicleModelsByUserId(Long userId);
输出是这样的:
[
{
"id": 2,
"vehicle": {
"id": 2,
"manufacturerId": 1,
"title": "Fazer FZ1S",
"ccm": 998,
"kw": 110,
"yearOfManufacture": 2008,
"engineTypeId": 1,
"active": true
},
"user": {
"id": 2,
"username": "sfajkovic",
"password": "33",
"firstName": "Ivan",
"lastName": "Fajkovic",
"active": true
},
"active": true
}
]
问题不在于我真的不希望结果中的用户对象,所以现在我需要弄清楚那个。之后,我将尝试映射车辆制造商类,以便在相同的响应中获取这些结果。
问题内容: 我无法在数据库(mySQL)中创建表,使用并尝试使用以下命令输入未来表的名称: 然后,在用户输入表名称之后,我尝试构造并调用该语句: 如果我尝试不输入名称就执行它(如常量字符串:“ CREATE TABLE newtable(…)”,但我需要输入名称),它将很好地工作。 问题答案: 阅读表名后,您将必须格式化字符串,例如: 然后创建像:
您好,我收到以下错误: 这是我的例子ata.kt 我的界面改装 addsUser的函数
运行时收到此错误。
我正在尝试使用JPA生成表。但我不能创造它。代码中没有错误,但似乎存在配置错误。但我找不到它,我尝试了很多配置但没有发生。多谢. 这是: } pom.xml
这边有个getMenuType、getMenuType1、getMenuType2三个方法引用,getMenuType1传入到queryWrapper中查询没问题,getMenuType和getMenuType2报错
我在使用下面的支付方法 它让我错误地说-无法使用OAuth密钥创建支出。 使用以下URL连接到我的应用程序的用户: https://connect.stripe.com/oauth/authorize?response_type=code 如果我使用的是该帐户的直接密钥,那么它可以正常工作。所以唯一的问题是当我使用一个使用OAuth获得的密钥时 下面是我正在使用的一种方法https://strip