我无法从组合键中检索确切ID。
我正在使用MySQL和Hibernate。
Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(ProductId.class);
criteria.setProjection(Projections.max("id"));
criteria.setMaxResults(1);
Integer max = (Integer) criteria.uniqueResult();
if (max == null) {
max = 0;
//This always giving null.
所以它会max =0;
在插入之前或之后,数据库中没有问题。
但是使用以下方法来检索id
:
productId.getId();
也总是给出零,但是在数据库中它递增id
。
为什么会这样?
它一定不能引起它的价值:
ProductId productId = new ProductId(id, barcode);
product.setName(name);
product.setPrice(price);
product.setId(productId);
id
是 主键 , 自动增量 和 唯一 ,但是barcode
只是 主键 。
这两个字段都是 复合键 。
摘要:
当我跳过启动ID时,它会给出
java.lang.NullPointerException
因此,如果将其初始化,则即使在插入“ 0”时也可以自动生成id
ProductId productId = new ProductId(0, barcode);
完成插入。
但是我无法检索确切的id
。
我正在使用以下产品保存产品:
String name = jNameTextField.getText();
double price = Double.parseDouble(jPriceTextField.getText());
int barcode = Integer.parseInt(jBarcdTextField.getText());
ProductId productId = new ProductId(0, barcode); // put zero for check
product.setName(name);
product.setPrice(price);
product.setId(productId);
manager.addProduct(product);
Product.java
public class Product implements java.io.Serializable {
public ProductId id;
private String name;
private double price;
private Stock stock;
public Product() {
}
public Product(ProductId id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
public Product(ProductId id, String name, double price, Stock stock) {
this.id = id;
this.name = name;
this.price = price;
this.stock = stock;
}
// Getter and Setters
谢谢。
答案 0 :(得分:0)
我仍然建议根据其唯一的id值删除ProductId类。 但是,要使查询与ProductId类一起工作:
Criteria criteria = session.createCriteria(Product.class);
将条件更改为Product类而不是ProductId类。
我认为(但不确定),也需要进行以下更改,将Hibernate指向ProductId id字段的int id字段。
criteria.setProjection(Projections.max("id.id"));
我还建议更改两个id字段之一的名称,以减少代码的混乱。