我对休眠有问题 @OneToMany
Map。这是我的根实体:
@Entity(name = "Proposta")
@Table(name = "PROPOSTA")
public class Proposta implements Serializable {
private static final long serialVersionUID = -705828064150128352L;
public Proposta() {
super();
}
@Id
@Column(name = "COD_PROPOSTA")
private Integer codProposta;
@OneToMany(mappedBy="proposta", fetch=FetchType.EAGER)
@Cascade({ CascadeType.ALL })
private List<PropostaUL> listaPropostaUl;
}
这是我的子实体:
@Entity(name = "PropostaUL")
@Table(name = "PROPOSTA_UL")
public class PropostaUL {
public PropostaUL() {
super();
}
@Id
@Column(name = "COD_FONDO_UE_UL")
private String codFondoUeUl;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "COD_PROPOSTA")
private Proposta proposta;
}
当我读这两个表的值时,一切都正常工作;当我试图保存它,而不是我有以下错误
gen 05, 2021 10:14:03 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1048, SQLState: 23000
gen 05, 2021 10:14:03 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Column 'COD_PROPOSTA' cannot be null
gen 05, 2021 10:14:03 AM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
save称之为
protected Object saveOrUpdate(Object obj, List<String> errorLog) {
Transaction transaction = null;
try {
if (session == null || ! session.isOpen()) {
session = HibernateFactory.getSessionFactory().openSession();
}
transaction = session.beginTransaction();
session.saveOrUpdate(obj);
transaction.commit();
} catch (HibernateException e) {
obj = null;
errorLog.add(e.getMessage());
} finally {
if (session != null) {
session.close();
}
}
return obj;
}
我在论坛上读到了其他同样的问题,但是所有建议的解决方案都不起作用。我也查过这个网站
https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/
即使分析的案例看起来相同,配置也一样,问题仍然存在。价值 COD_PROPOSTA
在根目录中,提供了实体,而不是 null
. 你对如何解决这个问题有什么建议吗?
2条答案
按热度按时间3wabscal1#
标记为id的列“cod\u proposta”和“cod\u fondo\u ue\u ul”不能为null,并且您不会为该属性赋予任何值(除非在创建对象后手动执行)。要自动提供id,可以添加注解
@GeneratedValue
至codProposta
以及codFondoUeUl
.piwo6bdm2#
如文件所述:
每当形成双向关联时,应用程序开发人员必须确保双方始终同步。
所以你应该加上
addPropostaUl()
以及removePropostaUl()
在添加或删除子元素时同步两端的实用程序方法:然后,在需要修改此关联时仅使用这些方法。
示例(添加新
PropostaUL
对现存的Proposta
):