최대 절전 모드 예외 : org.hibernate.AnnotationException : 엔티티에 지정된 식별자가 없습니다 : com..domain.idea.MAE_MFEView
이 예외가 발생하는 이유는 무엇입니까?
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 문서는 다음과 같이 작성합니다.
There is no difference between a view and a base table for a Hibernate mapping. This is transparent at the database level
For me, javax.persistence.Id
should be used instead of org.springframework.data.annotation.Id
. For anyone who encountered this issue, you can check if you imported the right Id
class.
This error can be thrown when you import a different library for @Id than Javax.persistance.Id ; You might need to pay attention this case too
In my case I had
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;
when I change the code like this, it got worked
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;
The code below can solve the 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;
}
If you add @Id
, then you can declare some more like as above declared method.
I know sounds crazy but I received such error because I forget to remove
private static final long serialVersionUID = 1L;
automatically generated by Eclipse JPA tool when a table to entities transformation I've done.
Removing the line above that solved the issue
'programing' 카테고리의 다른 글
PHP PDO : 문자셋, 이름 설정? (0) | 2020.05.18 |
---|---|
UIlabel layer.cornerRadius가 iOS 7.1에서 작동하지 않습니다 (0) | 2020.05.18 |
Swift에서 GCD 메인 스레드에서 매개 변수가있는 메소드를 호출하는 방법은 무엇입니까? (0) | 2020.05.18 |
치명적 : 자식 쓰기 트리 : 오류 트리 작성 (0) | 2020.05.18 |
.NET에서 파일 규칙 당 하나의 클래스? (0) | 2020.05.18 |