首页 文章

Hibernate:传递给分离的实体持久化

提问于
浏览
1

在我目前的 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">&iacute;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 回答

  • 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 .

  • 0

    您可能想要使用 merge 而不是 persist . persist只能插入新记录,而merge将执行插入或更新 . 发生错误的原因是,当他们选择现有ID时,您实际上想要进行更新,而不是插入 . 在调用之后,请务必使用merge返回的结果作为实体的新值 .

  • 0

    您是否可以尝试通过ID从数据库中选择来自客户端来设置您的Produto的Categoria . 你只是插入Produto但分类 . 因此,你的情况分类是不可持续的,应该是 .

相关问题