当前位置: 首页 > 知识库问答 >
问题:

“一对多”属性值类型不应为“持久性实体”

邢俊悟
2023-03-14
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

@Entity
@Table(name = "USUARIO")
public class Usuario {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID_USUARIO",unique = true,nullable = false)
    private Long id;

    @NotBlank(message = "usuario.cadastro.nome.obrigatorio")
    @Column(name = "NOME", unique = true, nullable = false,length = 100)
    private String nome;

    @Email(message = "usuario.cadastro.email.invalido")
    @Column(name = "E_MAIL", unique = true, nullable = false,length = 100)
    private String email;

    @NotBlank(message = "usuario.cadastro.senha.obrigatoria")
    @Column(name = "SENHA", unique = true, nullable = false, length = 10)
    private String senha;

    @OneToMany(mappedBy = "usuario",fetch = FetchType.LAZY)
    @Cascade({CascadeType.ALL})
    @Fetch(value = FetchMode.SELECT)
    private Set<DiasUsuarioTimeSheet> diasUsuarioTimeSheetList;


    public Usuario() {
        diasUsuarioTimeSheetList = new LinkedHashSet<DiasUsuarioTimeSheet>();
    }
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "DIAS_USUARIO_TIMESHEET")
public class DiasUsuarioTimeSheet {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID_DIAS_USUARIO_TIMESHEET",unique = true,nullable = false)
    private Long id;

    @Column(name = "DIAS_ID_DIAS", unique = true, nullable = false)
    private Dias dia;

    @ManyToOne
    @Cascade({CascadeType.MERGE, CascadeType.SAVE_UPDATE})
    @Column(name = "USUARIO_ID_USUARIO", unique = true, nullable = false)
    private Usuario usuario;

    @Column(name = "TIME_SHEET_ID_TIME_SHEET", unique = true, nullable = false)
    private TimeSheet timeSheet;

    public DiasUsuarioTimeSheet() {
    }
@OneToMany(mappedBy = "usuario",fetch = FetchType.LAZY)
@Cascade({CascadeType.ALL})
@Fetch(value = FetchMode.SELECT)
private Set<DiasUsuarioTimeSheet> diasUsuarioTimeSheetList;

“一对多”属性值类型不应为“持久性实体”

共有1个答案

徐佐
2023-03-14

以下注释

@Column(name = "USUARIO_ID_USUARIO", unique = true, nullable = false)

应该是

@JoinColumn(name = "USUARIO_ID_USUARIO", nullable = false)

unique=true属性没有意义,因为它是一个多对一的关联:您显然会有多个DiasUsuarioTimeSheets引用同一个用户。

@Column(name = "TIME_SHEET_ID_TIME_SHEET", unique = true, nullable = false)
@ManyToOne
@JoinColumn(name = "TIME_SHEET_ID_TIME_SHEET", nullable = false)
 类似资料:
  • 我正在试用IntelliJ IDEA,它警告我一个我不太理解的冬眠协会。 一面: 为了检查一下精神状况,我看了这篇文章,也看了这篇文章。

  • 我正在引用另一个实体类中的实体,并出现此错误。下面是示例代码。我有这些课程在坚持。还有xml。 是什么导致了这个问题?我正在使用Spring数据JPA和Hibernate。

  • 我正在尝试设置一个属性,该属性将由我的功能测试中的每个方法使用。问题是它在测试之间并没有持续。 这是我的测试类: 我只希望属性在该类中的所有测试中保持不变。

  • 我在我的项目中使用Spring数据JPA。当实体被保存或更新时,我想跟踪CreatedBy和LastModifiedBy,以了解哪个用户执行该活动。但我面临的问题是,我有两种不同类型的用户。这些是系统用户和加油机。这两种用户类型都有权在任何实体中执行CRUD操作。 另一件事是,我见过大多数示例将和作为字符串字段保存。但问题是从数据库中检索数据时,他们将检索为用户ID(字符串值)。我需要将用户ID存

  • 我正在寻找从经典Akka持久化迁移到Akka持久化类型。在这里找到的Lagom留档:1说“注意:从Lagom持久化(经典)迁移到Akka持久化类型时的唯一限制是需要完全关闭集群。即使所有持久数据都是兼容的,Lagom持久化(经典)和Akka持久化类型也不能共存。” 有人知道这是否适用于服务器可能知道的所有持久实体吗?例如,我使用的服务有3个独立的持久实体。我需要一次迁移所有3个,还是可以一次迁移一

  • 如何使类示例推断类型基于实例值检查: 打字沙盒。