在我目前的春季项目中,当我尝试在数据库中存储基于此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>
任何人都可以告诉我这里有什么问题?我有点坚持了一段时间。
答案 0 :(得分:0)
您可以尝试通过ID从数据库中选择来自客户端来设置您的Produto的Categoria。你只是插入Produto但分类。因此,你的情况分类是不可持续的,应该是。
答案 1 :(得分:0)
您可能希望使用合并而不是持久。 persist只能插入新记录,而merge将执行插入或更新。发生错误的原因是,当他们选择现有ID时,您实际上想要进行更新,而不是插入。在调用后,请务必使用merge返回的结果作为实体的新值。
答案 2 :(得分:0)
此问题的工作解决方案是该类的配置:
@Entity
@Table(name="produto")
public class Produto {
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="nome", length=32, nullable=false, unique=true)
@Order(value=1)
private String nome;
@Column(name="titulo", length=32, nullable=false)
@Order(value=2)
private String titulo;
@Column(name="preco")
@Order(value=3)
private Float preco;
@OneToOne
@JoinColumn(name="categoria")
@Order(value=4)
private Categoria categoria;
@Column(name="descricao", length=65535)
@Order(value=5)
private String descricao;
@Column(name="destaque")
@Order(value=6)
private boolean destaque;
}
现在有了这个,我可以插入Produto
个实体,其中一个被选中Categoria
。我现在正在尝试解决插入问题,而无需选择Categoria
。