Я разработал несколько таблиц для моего приложения, где я поместил что-то вроде этого:связанные с JPA объекты сохраняются
product productversion
--- ---
productId productVersionId
productVersionId (ref) productId (ref)
name length
height
где мы имеем отношение один ко многим. Мне просто нужен базовый продукт с параметрами, которые могут изменять и изменять параметры, чтобы я мог наблюдать за его историей. Теперь ... У меня проблема с сохранением этих объектов. Я попробовал несколько способов, это самое старое:
Product p = new Product();
p.name = "some name";
Productversion pv = new Productversion();
pv.length = 10;
pv.height = 20;
p.productversionId = pv;
Но при попытке упорствовать этот объект я получаю ошибку, что PRODUCTID не может быть нулевым, и это относится к полю ProductID внутри объекта PRODUCTVERSION. Как я могу это сделать?
[обновление] Некоторые больше информации о моей проблеме:
public class Product implements Serializable {
@JoinColumn(name = "productversionId", referencedColumnName = "productversionId")
@ManyToOne(optional = true, cascade = CascadeType.PERSIST)
private Productversion productversionId;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "productId")
private Collection<Productversion> productversionCollection;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ProductId")
private Integer productId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 255)
@Column(name = "Name")
private String name = null;
// well I believe construct and getter/setter not important now
И второй Entity:
public class Productversion implements Serializable {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "productversionId")
private Collection<Productiondata> productiondataCollection;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "productversionId")
private Integer productversionId;
@Basic(optional = false)
@NotNull
@Column(name = "parameter")
private float weight;
И кстати я создаю новый объект (просто не имеют ни малейшего представления о том, как я могу это сделать):
public Product getNewProduct() {
if (newProduct == null) {
this.newProduct = new Product();
Productversion pv = new Productversion();
pv.setProductId(newProduct);
newProduct.setProductversionId(pv);
}
return newProduct;
}
И как я пытаюсь упорствовать объект:
public Boolean addEntry(Product productData) {
Boolean status = false;
DbConnector dc = new DbConnector();
EntityManager em = dc.getEntityManager();
try {
EntityTransaction et = em.getTransaction();
et.begin();
em.persist(productData);
et.commit();
status = true;
} finally {
em.close();
}
return status;
}
Не могли бы вы показать код обоих классов сущностей. – SubOptimal
Конечно, я обновил свой вопрос с помощью кода. – J33nn
Что-то странно выглядит. В «Продукте» вы определяете отношение «ManyToOne» (productversionId) и «OneToMany» (productversionCollection) между «Продуктом» и «Productversion». Где определение 'Productiondata'. – SubOptimal