Я пытаюсь использовать JPA для простого обновления столбца моей таблицы в MYSQL.
Вот фрагмент:
public Node get_folder(long fileID) {
try {
List resList = nodeFacade.list_parent(fileID, LinkType.FILE);
List resList1 = nodeFacade.list_parent(fileID, LinkType.VER_LINKS);
if (resList == null) {
throw new Exception("failed to get folder of a file." +
nodeFacade.getMsg());
}
if (resList.size() > 1) {
throw new Exception("one file cannot be attached to more than one folder(s).");
}
//fixed bugs: modified here to display different version
if(resList1.size()==1){
Fmedia fmedia = em.find(fileID,Fmedia.class);
fmedia.setFstatus(2);
em.merge(fmedia);
return (Node) resList1.get(0);
}
Теперь fmedia - это таблица, и я хочуобновить существующую запись значения в столбце fstatus
таблицы.Я получил ошибку:
Причина: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: столбец 'FEXT' не может быть пустым
FEXT
является столбцомв той же таблице, и это не обнуляемый столбец, но к этой записи уже привязано значение. Исключение выдается в строке em.merge(fmedia)
.Я не понимаю, в чем здесь проблема.
Я не мог использовать save
, поскольку мой JPA - более старая версия.
Кто-нибудь знает, что я делаю неправильно?
РЕДАКТИРОВАТЬ: код организации:
@Entity
@Table(name = "fmedia")
public class Fmedia implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "NODEID")
private Long nodeid;
@Basic(optional = false)
@Column(name = "FONAME")
private String foname;
@Basic(optional = false)
@Column(name = "FGNAME")
private String fgname;
@Basic(optional = false)
@Column(name = "FEXT")
private String fext;
@Basic(optional = false)
@Column(name = "FFULPATH")
private String ffulpath;
@Column(name = "FTYPE")
private int ftype;
@Basic(optional = false)
@Column(name = "FSIZE")
private long fsize;
@Column(name = "FREMARK")
private String fremark;
@Column(name = "FSTATUS")
private int fstatus;
@Column(name = "FDESC")
private String fdesc;
@Column(name = "MODIFYDATE")
@Temporal(TemporalType.DATE)
private Date ModifyDate;
@Size(max = 3000)
@Column(name = "FNTFREMARK")
private String fntfremark;
@Transient
private Fverinfo fver;