在我目前的 Spring 季项目中,当我尝试在数据库中存储基于此entty的记录时:
@Entity
@Table(name="produto")
public class Produto {
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="nome", nullable=false, unique=true)
@Order(value=1)
private String nome;
@Column(name="preco", nullable=false)
@Order(value=2)
private Float preco;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="categoria")
@Cascade(value = { org.hibernate.annotations.CascadeType.ALL })
@Order(value=3)
private Categoria categoria;
@Column(name="resumo", length=140)
@Order(value=4)
private String resumo;
@Column(name="descricao", length=65535)
@Order(value=5)
private String descricao;
}
我收到此错误:http://www.klebermota.eti.br/wp-content/erro.html
只有当我从下面的表单中选择一个项目时,才会显示错误 . 如果我没有选择一个选项,则记录存储没有问题 .
<form id="command" class="form" action="/loja/Produto/cadastra" method="POST" enctype="multipart/form-data">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6"></div>
<div class="col-md-3"></div>
</div>
<div class="row">
<div class="col-md-3">
<h3><label for="nome" class="label label-default">nome</label></h3>
</div>
<div class="col-md-6">
<input id="nome" name="nome" class="form-control" type="text" value=""/>
</div>
<div class="col-md-3"></div>
</div>
<div class="row">
<div class="col-md-3">
<h3><label for="preco" class="label label-default">preco</label></h3>
</div>
<div class="col-md-6">
<input id="preco" name="preco" pattern="[0-9]{3}.[0-9]{2}" class="form-control valida" type="text" value=""/>
</div>
<div class="col-md-3"></div>
</div>
<div class="row">
<div class="col-md-3">
<h3><label for="categoria" class="label label-default">categoria</label></h3>
</div>
<div class="col-md-3">
<select id="categoria.id" name="categoria.id" class="form-control select categoria" data-nome="Categoria" data-lista="/loja/Produto/listagem3.json"></select>
</div>
<div class="col-md-3"></div>
</div>
<div class="row">
<div class="col-md-3">
<h3><label for="resumo" class="label label-default">resumo</label></h3>
</div>
<div class="col-md-6">
<input id="resumo" name="resumo" class="form-control" type="text" value=""/>
</div>
<div class="col-md-3"></div>
</div>
<div class="row">
<div class="col-md-3">
<h3><label for="descricao" class="label label-default">descricao</label></h3>
</div>
<div class="col-md-6">
<textarea id="descricao" name="descricao" class="form-control" rows="25" cols="50"></textarea>
</div>
<div class="col-md-3"></div>
</div>
<div class="panel panel-default">
<div class="panel-heading">ícone do produto (jpeg, 171x180)</div>
<div class="panel-body">
<input type="file" name="icone" class="form-control">
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">imagem da capa (jpeg, 1280x250)</div>
<div class="panel-body">
<input type="file" name="file" class="form-control">
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">capturas de tela (jpeg, 960x720)</div>
<div class="panel-body">
<p></p>
</div>
</div>
<div class="row">
<div class="col-md-3"> <button type="submit" class="btn btn-lg btn-primary">cadastrar</button> </div>
<div class="col-md-3"></div>
</div>
</form>
谁能告诉我这里有什么问题?我有点坚持这一段时间了 .
3 回答
该问题的工作解决方案是该类的配置:
现在有了这个,我可以插入
Produto
实体,其中一个被选中Categoria
. 我正在尝试解决插入而无需选择Categoria
.您可能想要使用 merge 而不是 persist . persist只能插入新记录,而merge将执行插入或更新 . 发生错误的原因是,当他们选择现有ID时,您实际上想要进行更新,而不是插入 . 在调用之后,请务必使用merge返回的结果作为实体的新值 .
您是否可以尝试通过ID从数据库中选择来自客户端来设置您的Produto的Categoria . 你只是插入Produto但分类 . 因此,你的情况分类是不可持续的,应该是 .