ReportDimensions.java:EntityManager.merge()
package com.test.main.domain.resource;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
@Entity
@Table(name = "report_dimensions")
public class ReportDimensions implements Serializable {
public ReportDimensions() {
super();
}
public ReportDimensions(long userId, long reportId, String reportType) {
super();
this.userId = userId;
this.reportType = reportType;
}
public long getDimensionsId() {
return dimensionsId;
}
public void setDimensionsId(long dimensionsId) {
this.dimensionsId = dimensionsId;
}
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public String getReportType() {
return reportType;
}
public void setReportType(String reportType) {
this.reportType =reportType;
}
public int getWinWidth() {
return winWidth;
}
public void setWinWidth(int winWidth) {
this.winWidth = winWidth;
}
public int getWinHeight() {
return winHeight;
}
public void setWinHeight(int winHeight) {
this.winHeight = winHeight;
}
@Id
@Column(name = "report_dimensions_id")
@GeneratedValue
private long dimensionsId;
@Column(name = "user_id")
@NotNull
private long userId;
@Column(name = "report_type")
@NotNull
private String reportType;
@Column(name = "window_width")
@NotNull
private int winWidth;
@Column(name = "window_height")
@NotNull
private int winHeight;
private static final long serialVersionUID = 1L;
}
Вот мой DAOImpl:
public void updateWindowSize(Long userId, String reportType, int width, int height) {
ReportDimensions dimensions = entityManager.find(ReportDimensions.class, new ReportDimensions(userId, reportType));
if(dimensions == null) dimensions = new ReportDimensions(userId, reportType);
dimensions.setWinWidth(width); dimensions.setWinHeight(height);
entityManager.merge(dimensions); }
Здесь я пытаюсь создать запись, если не существует другого обновить запись. Аргументы конструктора для ReportDimensions не имеют первичного ключа, поскольку он сгенерирован автоматически. Согласно документации для EntityManager.find (arg1, arg2), мы должны использовать первичный ключ для 2-го аргумента. Я не получал автоматически сгенерированный идентификатор в любой момент времени. Что я должен сделать для всего этого, чтобы работать.
добавить больше деталей, показать полный код для 'ReportDimensions' лица – Chaitanya