我目前正在使用 Postgresql 學習 Spring Boot 開發。直到今天,當我嘗試在當前物體中再添加一個 OneToMany 關系時,一切都很好,這導致了 Hibernate 例外:
Use of @OneToMany or @ManyToMany targeting an unmapped class: com.github.hryniuklukas.Basic_WMS.model.Document.palletList[com.github.hryniuklukas.Basic_WMS.model.Pallet]
不幸的是,目前關于 SO 的答案沒有給我任何提示。
兒童班:
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import java.time.LocalDate;
@NoArgsConstructor
@MappedSuperclass
@Entity
@Table(name = "pallet")
@Getter
@Setter
public class Pallet {
private @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id;
private String palletCode;
private LocalDate date;
private boolean isInWarehouse;
public Pallet(String palletCode, LocalDate date){
this.palletCode=palletCode;
this.date = date;
this.isInWarehouse = true;
}
@ManyToOne(fetch = FetchType.LAZY)
private PalletSpace palletSpace;
@ManyToOne(fetch = FetchType.LAZY)
private Document outboundDocument;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Pallet )) return false;
return id != null && id.equals(((Pallet) o).getId());
}
public void setPalletStatusAsSent(){
this.isInWarehouse = false;
}
@Override
public int hashCode() {
return getClass().hashCode();
}
}
家長 1:
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor
@Getter
@Setter
@Entity(name = "PalletSpace")
@Table(name = "pallet_space")
public class PalletSpace {
private @Id @GeneratedValue (strategy = GenerationType.IDENTITY) Long id;
private String spaceCode;
@OneToMany(
mappedBy = "palletSpace",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Pallet> palletList = new ArrayList<>();
public PalletSpace(String spaceCode){
this.spaceCode = spaceCode;
}
public void addPallet(Pallet pallet){
palletList.add(pallet);
pallet.setPalletSpace(this);
}
public void removePallet(Pallet pallet){
palletList.remove(pallet);
pallet.setPalletSpace(null);
}
}
家長 2:
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor
@Getter
@Setter
@Slf4j
@Entity
@Table(name = "document")
public class Document {
private @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id;
@OneToMany(
mappedBy = "outboundDocument",
cascade = CascadeType.PERSIST
)
private List<Pallet> palletList = new ArrayList<>();
public void addPalletToDocument(Pallet pallet) {
palletList.add(pallet);
pallet.setOutboundDocument(this);
}
public List<Pallet> getConnectedPalletList() {
return this.palletList;
}
public void removePalletFromDocument(Pallet pallet) {
palletList.remove(pallet);
pallet.setOutboundDocument(null);
}
public void executeDocument() {
palletList.forEach(Pallet::setPalletStatusAsSent);
}
}
與托盤空間相關的托盤作業正常,將檔案添加到組合中會導致例外。
JPA Buddy 似乎抓住了應有的關系,正確地顯示了參考樹,Spring 并沒有啟動你。
應用屬性:
spring.datasource.url=jdbc:postgresql://localhost:5050/postgres
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
uj5u.com熱心網友回復:
嘗試從 Pallet 中洗掉 @MappedSuperclass,因為它不應該與 @Entity 混合
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/505373.html
