Я не могу получить точный идентификатор из составного ключа.
Я использую 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
is первичный ключ , автоинкремент и уникально , но barcode
является просто первичным ключом .
Эти оба поля являются составнымиключи .
Summery:
Когда я пропускаю инициализирующий идентификатор, он дает
java.lang.NullPointerException
Так что, если он инициализируется, он может генерировать идентификатор автоматически при вставке, даже просто помещая '0 '
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
Спасибо.