이 예외가 발생하는 이유는 무엇입니까?
package com.domain.idea;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.annotations.AccessType;
/**
* object model for the view [InvestmentReturn].[vMAE_MFE]
*/
@Entity
@Table(name="vMAE_MFE", schema="InvestmentReturn")
@AccessType("field")
public class MAE_MFEView
{
/**
* trade property is a SuggestdTradeRecommendation object
*/
@OneToOne(fetch = FetchType.LAZY , cascade = { CascadeType.PERSIST })
@JoinColumn(name = "suggestedTradeRecommendationID")
private SuggestedTradeRecommendation trade;
/**
* Most Adeverse Excursion value
*/
private int MAE;
public int getMAE()
{
return MAE;
}
/**
* Most Favorable Excursion value
*/
private int MFE;
public int getMFE()
{
return MFE;
}
/**
* @return trade property
* see #trade
*/
public SuggestedTradeRecommendation getTrade()
{
return trade;
}
}
업데이트 : 코드를 다음과 같이 변경했습니다.
package com.domain.idea;
import javax.persistence.CascadeType;
import javax.persistence.FetchType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.annotations.AccessType;
/**
* object model for the view [InvestmentReturn].[vMAE_MFE]
*/
@Entity
@Table(name="vMAE_MFE", schema="InvestmentReturn")
@AccessType("field")
public class MAE_MFEView
{
/**
* trade property is a SuggestdTradeRecommendation object
*/
@Id
@OneToOne(fetch = FetchType.LAZY , cascade = { CascadeType.PERSIST })
@JoinColumn(name = "suggestedTradeRecommendationID")
private SuggestedTradeRecommendation trade;
/**
* Most Adeverse Excursion value
*/
private int MAE;
public int getMAE()
{
return MAE;
}
/**
* Most Favorable Excursion value
*/
private int MFE;
public int getMFE()
{
return MFE;
}
/**
* @return trade property
* see #trade
*/
public SuggestedTradeRecommendation getTrade()
{
return trade;
}
}
그러나 지금이 예외가 발생합니다.
Caused by: org.hibernate.MappingException: Could not determine type for: com.domain.idea.SuggestedTradeRecommendation, at table: vMAE_MFE, for columns: [org.hibernate.mapping.Column(trade)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:292)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:276)
at org.hibernate.mapping.RootClass.validate(RootClass.java:216)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1135)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1320)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
... 145 more
답변
로 표시된 필드가 누락되었습니다 @Id
. 각각 @Entity
은 @Id
-데이터베이스의 기본 키입니다.
엔터티를 별도의 테이블에 유지하지 않고 다른 엔터티의 일부로 유지하려는 경우 @Embeddable
대신 대신 사용할 수 있습니다 @Entity
.
단순히 데이터 전송 객체가 최대 절전 모드 엔터티의 일부 데이터를 보유하도록하려면 아무 주석도 사용하지 마십시오. 단순한 포조로 두십시오.
업데이트 : SQL 뷰와 관련하여 Hibernate 문서는 다음과 같이 작성합니다.
최대 절전 모드 매핑의 뷰와 기본 테이블에는 차이가 없습니다. 이것은 데이터베이스 수준에서 투명합니다.
답변
나를 javax.persistence.Id
위해 대신 사용해야합니다 org.springframework.data.annotation.Id
. 이 문제가 발생한 사람은 올바른 Id
수업 을 가져 왔는지 확인할 수 있습니다 .
답변
이 오류는 @Id에 대해 Javax.persistance.Id 와 다른 라이브러리를 가져올 때 발생할 수 있습니다 . 이 경우에도주의를 기울여야 할 수도 있습니다.
내 경우에는
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Table;
import org.springframework.data.annotation.Id;
@Entity
public class Status {
@Id
@GeneratedValue
private int id;
이와 같은 코드를 변경하면 작동합니다.
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Table;
import javax.persistence.Id;
@Entity
public class Status {
@Id
@GeneratedValue
private int id;
답변
아래 코드는 NullPointerException을 해결할 수 있습니다.
@Id
@GeneratedValue
@Column(name = "STOCK_ID", unique = true, nullable = false)
public Integer getStockId() {
return this.stockId;
}
public void setStockId(Integer stockId) {
this.stockId = stockId;
}
을 추가 @Id
하면 위에 선언 된 메소드와 같이 더 선언 할 수 있습니다.
답변
나는 미친 소리를 알고 있지만 제거하는 것을 잊어 버렸기 때문에 그러한 오류가 발생했습니다.
private static final long serialVersionUID = 1L;
내가 테이블을 엔터티로 변환하면 Eclipse JPA 도구가 자동으로 생성합니다.
문제를 해결 한 위의 줄을 제거
답변
PK 엔터티에 @EmbeddableId를 사용하면 문제가 해결되었습니다.
@Entity
@Table(name="SAMPLE")
public class SampleEntity implements Serializable{
private static final long serialVersionUID = 1L;
@EmbeddedId
SampleEntityPK id;
}
답변
모델 클래스 잘못된 가져 오기에 따라이 문제가 있다고 생각합니다.
import org.springframework.data.annotation.Id;
일반적으로 다음과 같아야합니다.
import javax.persistence.Id;