关于javafx:尝试映射Set类型对象时出错(属性访问方法和JPA注释)不重复

Error when trying to map a Set type object (Property access method and JPA annotation) not duplicated tho

为了完成另一个任务,我需要重新定义POJO类并使用属性访问来利用我提到的类中的JavaFX属性,但是我面临着这个错误。

1
org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: deposito, for columns: [org.hibernate.mapping.Column(productoses)]

我已经尝试过org.hibernate.mappingeexception:中提到的解决方案无法确定:java.util.set和org.hibernate.mappingeexception:的类型无法确定:java.util.list的类型,但仍然无法使其正常工作。

这是我的OneTomany实体类,这是我的Manytoone类。

这就是stacktrace。

1
2
3
4
5
6
7
8
9
10
11
12
org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: deposito, for columns: [org.hibernate.mapping.Column(productoses)]
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:455)
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:422)
    at org.hibernate.mapping.Property.isValid(Property.java:226)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:597)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:265)
    at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:451)
    at org.hibernate.boot.internal.MetadataImpl.buildSessionFactory(MetadataImpl.java:170)
    at ajfmo.inventario.utils.HibernateUtil.getSessionFactory(HibernateUtil.java:19)
    at ajfmo.inventario.DAO.ProductDAO.<init>(ProductDAO.java:20)
    at ajfmo.inventario.view.MainView.<init>(MainView.java:60)

号编辑

这是我的冬眠课程。这是出现在堆栈跟踪中的DAO。

提前谢谢,这是我第一个使用Hibernate的项目…或者我的第一个项目。


在你的Deposito类中,我看到你的jpa注释在属性上,而不是像类中的其他地方一样在getter上(我怀疑这是你的问题,但是保持一致可能是个好主意)。

这里有:

1
2
3
4
5
6
@OneToMany(fetch = FetchType.LAZY, mappedBy ="deposito")
private Set<Productos> productoses = new HashSet<Productos>(0);

public Set<Productos> getProductoses() {
  return this.productoses;
}

Productos类中,您有:

1
2
3
4
5
6
7
8
9
10
11
12
private ObjectProperty<Deposito> deposito;
private Deposito _deposito;

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name ="deposito_producto", referencedColumnName ="descripcion_deposito", nullable = false)
public Deposito getDeposito() {
  if (deposito == null) {
    return _deposito;
  } else {
    return deposito.get();
  }
}

referencedColumnName ="descripcion_deposito"指出了这种方法(可能不是您想要的方法):

1
2
3
4
5
6
7
8
@Column(name ="descripcion_deposito", unique = true, nullable = false, length = 45)
public String getDescripcionDeposito() {
  if (descripcionDeposito == null) {
    return _descripcionDeposito;
  } else {
    return descripcionDeposito.get();
  }
}

我不知道您的列名是什么,但是referencedColumnName应该指向Productos对象字段的主键/外键,在Productos类中尝试一下:

1
2
3
4
5
6
7
8
9
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name ="deposito_producto", referencedColumnName ="idDeposito", nullable = false)
public Deposito getDeposito() {
  if (deposito == null) {
    return _deposito;
  } else {
    return deposito.get();
  }
}