如何解决我映射不正确? “字段列表”中的未知列
我正在尝试使用Spring Boot重新创建一个较旧的J2EE项目作为学习练习,并且在此映射问题上停留了一段时间。当我尝试为我的User
实体提取结果集时,我会一直遇到“字段列表”中的未知列'user0_.user_id',并且与Product
实体一样
请看看我的模式。
这是我的实体:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int userId;
private String firstName;
private String lastName;
private String email;
private String username;
private String password;
private String roleName;
@OneToMany(mappedBy = "userJ")
private List<Card> cards;
//constructors and getters/setters....
}
@Entity
public class Card {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int cardId;
private String cardNumber;
private String cardType;
private String expiryMonth;
private String expiryYear;
private String cardHolder;
@ManyToOne
@JoinColumn(name = "userId")
private User userJ;
@OneToMany(mappedBy = "cardJ")
private List<Purchase> purchases;
//constructors and getters/setters....
}
@Entity
public class Purchase {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int purchaseId;
private String notes;
@Basic
private Timestamp purchaseDate;
@ManyToOne
@JoinColumn(name = "cardId")
private Card cardJ;
@OneToMany(mappedBy="purchaseJ")
private List<PurchaseItem> purchaseItems;
//constructors and getters/setters....
}
@Entity
public class PurchaseItem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int purchaseItemId;
private int quantity;
private BigDecimal price;
@ManyToOne
@JoinColumn(name="purchaseId")
private Purchase purchaseJ;
@ManyToOne
@JoinColumn(name="productId")
private Product productJ;
//constructors and getters/setters....
}
@Entity
public class Product {
@Id
private String productId;
private String manufacturer;
private String item;
private String description;
private BigDecimal price;
@Column(nullable = false,columnDefinition = "TINYINT(1)")
private byte available;
@OneToMany(mappedBy = "productJ")
private List<PurchaseItem> purchaseItems;
//constructors and getters/setters....
}
我的DAO:
@Repository
@Transactional
public class UserDAOImpl implements UserDAO {
@Autowired
public EntityManager eman;
@Override
public List<User> showUsers() {
return eman.createQuery("Select u from User u",User.class).getResultList();
}
}
我的休息控制器:
@RestController
@RequestMapping("/api")
public class SheridanSportsRESTController {
@Autowired
private UserDAO userDAO;
@Autowired
private ProductDAO productDAO;
@GetMapping("/users")
public List<User> showUsers(){
return userDAO.showUsers();
}
@GetMapping("/products")
public List<Product> showProducts(){
return productDAO.showProducts();
}
}
由于@ManyToMany
中的额外属性,我没有在联接表上使用PurchaseItem
。
解决方法
您必须像这样将列注释放在userId属性中:
@Column(name="UserId")
private Integer userId;
这是因为当在注释为@Entity的类中时,如果不注释列,则根据Java标准,如果该列为驼峰式,则会将userId转换为user_id,并添加下划线()。
由于您的列不是这样命名的,因此需要使用@Column批注指定名称。
我建议您将id定义为非原始数据类型,因为您需要将值设置为null。
,我能够通过更改SQL Error: 1054,SQLState: 42S22 Unknown column in 'field list' error Java Spring Boot Mysql error
中提到的application.properties文件中的命名策略来解决该问题。谢谢大家的帮助和重要信息。
干杯:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。