웹 응용 프로그램 Extjs, Spring3.0, JPA, Hibernate가 있습니다. 나는 잘 작동하는 단일 엔티티로 검색 페이지를 가지고 있지만 어제 사용자 엔티티에서 @manytoone을 추가하고 애플리케이션이 작동을 멈춘다. Extjs는 예외를 던지기 시작합니다. 디버깅하려고 할 때 @manytoOne 관계의 문제가 발견되었습니다. 아무도 나에게 힌트를 주시겠습니까?Extjs + Spring + JPA + HIbernate
@Controller
public class BusinessCalsController {
@Autowired
private BusinessCalService businessCalService;
public void setBusinessCalService(BusinessCalService businessCalService) {
this.businessCalService = businessCalService;
}
@SuppressWarnings("unchecked")
@RequestMapping(value="/businessCalView.do",method=RequestMethod.GET)
public @ResponseBody Map<String,? extends Object> view(HttpServletRequest request, HttpServletResponse response) throws Exception {
try{
String strStart = request.getParameter("start"); //start index
String strLimit = request.getParameter("limit"); //limit record num
String strSort = request.getParameter("sort"); //desc or asc
String strDir = request.getParameter("dir"); //property for sort
Map businessCal = (Map)businessCalService.getBusinessCalList(strStart, strLimit, strSort, strDir);
Map modelMap = getJSONMap((List<BusinessCal>) businessCal.get("resultSet"));
return modelMap;
} catch (Exception e) {
return getModelMapError("Error retrieving Machine from database.");
}
}
/**
* Generates modelMap to return in the modelAndView
* @param contacts
* @return
*/
private Map<String,Object> getJSONMap(List<BusinessCal> businessCal){
Map<String,Object> modelMap = new HashMap<String,Object>(3);
modelMap.put("total", businessCal.size());
modelMap.put("data", businessCal);
modelMap.put("success", true);
return modelMap;
}
/**
* Generates modelMap to return in the modelAndView in case
* of exception
* @param msg message
* @return
*/
private Map<String,Object> getModelMapError(String msg){
Map<String,Object> modelMap = new HashMap<String,Object>(2);
modelMap.put("message", msg);
modelMap.put("success", false);
return modelMap;
}
}
@Service
public class BusinessCalService {
@Autowired
private BusinessCalDAO businessCalDAO;
private BusinessCalJsonUtil util;
/**
* Get all contacts
* @return
*/
@Transactional(readOnly=true)
public Object getBusinessCalList(String strStart,String strLimit,String strSort, String strDir){
return businessCalDAO.searchBusinessCal(strStart, strLimit, strSort, strDir);
}
/**
* @return the userCalDAO
*/
public BusinessCalDAO getBusinessCalDAO() {
return businessCalDAO;
}
/**
* @param userCalDAO the userCalDAO to set
*/
@Autowired
public void setBusinessCalDAO(BusinessCalDAO businessCalDAO) {
this.businessCalDAO = businessCalDAO;
}
/**
* Spring use - DI
* @param util
*/
@Autowired
public void setJsonUtil(BusinessCalJsonUtil util) {
this.util = util;
}
}
@Repository
public class BusinessCalDAO {
@Autowired
private HibernateTemplate hibernateTemplate;
private boolean flag;
/**
* @return the hibernateTemplate
*/
@SuppressWarnings("unchecked")
public void setHibernateTemplate(HibernateTemplate hibernateTemplate){
this.hibernateTemplate = hibernateTemplate;
}
/**
* Get List of UsersCals from database
* @return list of all contacts
*/
@SuppressWarnings("unchecked")
public Object searchBusinessCal(String strStart,String strLimit,String strSort, String strDir) {
PageHibernate newPage = null;
BusinessCal obj = new BusinessCal();
newPage = new PageHibernate("from BusinessCal", (strStart != null && !strStart.equals("null")) ? Integer.parseInt(strStart) : 0 , (strLimit != null && !strLimit.equals("null")) ? Integer.parseInt(strLimit) : 0 ,obj.getClass());
return hibernateTemplate.execute(newPage);
}
}
@SuppressWarnings("serial")
@Entity
@Table(name="SP_BU_CALS",schema ="TAX_STG")
public class BusinessCal implements Serializable{
private BULookUp objBULookUp;
private Integer intID;
private String strBussUnitId;
/**
* @return the intID
*/
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "FEED_SEQ")
@SequenceGenerator(name="FEED_SEQ", sequenceName = "TAX_FEED.FEED_SEQ")
public Integer getIntID() {
return intID;
}
/**
* @param intID the intID to set
*/
public void setIntID(Integer intID) {
this.intID = intID;
}
/**
* @return the strBusinessUnitId
*/
@Column(name="BU_ID")
public String getStrBussUnitId() {
return strBussUnitId;
}
/**
* @param strBusinessUnitId the strBusinessUnitId to set
*/
public void setStrBussUnitId(String strBussUnitId) {
this.strBussUnitId = strBussUnitId;
}
/**
* @return the objBULookUp
*/
@ManyToOne
@JoinColumn(name = "BU_ID", insertable = false, updatable = false)
public BULookUp getObjBULookUp() {
return objBULookUp;
}
/**
* @param objBULookUp the objBULookUp to set
*/
public void setObjBULookUp(BULookUp objBULookUp) {
this.objBULookUp = objBULookUp;
}
}
문제 개시 arice 난 BusinessCal 모델 BULookUp objBULookUp 추가 한 경우. BULookUp에 대한 코드와 extjs 파일에 대한 코드를 추가하겠습니다.
@SuppressWarnings("serial")
@Entity
@Table(name="SP_BU_LKUP",schema ="TAX_STG")
public class BULookUp implements Serializable{
private String strBusinessUnitID;
private String strBusinessUnitDescription;
private String strCBDCode;
private Integer intActive;
/**
* @return the strBusinessUnitID
*/
@Id
@Column(name="BU_ID")
public String getStrBusinessUnitID() {
return strBusinessUnitID;
}
/**
* @param strBusinessUnitID the strBusinessUnitID to set
*/
public void setStrBusinessUnitID(String strBusinessUnitID) {
this.strBusinessUnitID = strBusinessUnitID;
}
/**
* @return the strBusinessUnitDescription
*/
@Column(name="BU_DESCR")
public String getStrBusinessUnitDescription() {
return strBusinessUnitDescription;
}
/**
* @param strBusinessUnitDescription the strBusinessUnitDescription to set
*/
public void setStrBusinessUnitDescription(String strBusinessUnitDescription) {
this.strBusinessUnitDescription = strBusinessUnitDescription;
}
/**
* @return the strCBDCode
*/
@Column(name="CBD")
public String getStrCBDCode() {
return strCBDCode;
}
/**
* @param strCBDCode the strCBDCode to set
*/
public void setStrCBDCode(String strCBDCode) {
this.strCBDCode = strCBDCode;
}
/**
* @return the intActive
*/
@Column(name="ACTIVE")
public Integer getIntActive() {
return intActive;
}
/**
* @param intActive the intActive to set
*/
public void setIntActive(Integer intActive) {
this.intActive = intActive;
}
}
에 extjs
app = function() {
var createForm;
var updateForm;
var ds;
var dataGrid;
var menu;
var updateMenuItem;
var createMenuItem;
var readMenuItem;
var deleteMenuItem;
var tb;
var sm;
var userRecord;
var reader;
var writer;
var proxy;
var pagetbUsers;
var getContext = function() {
var base = document.getElementsByTagName('base')[0];
if (base && base.href && (base.href.length > 0)) {
base = base.href;
} else {
base = document.URL;
}
return base.substr(0, base.indexOf("/", base.indexOf("/", base.indexOf("//") + 2) + 1));
};
var onRowClick = function(SelectionModel,rowIndex,record) {
onUpdateClick()
}
return {
init:function() {
businessCalRecord = Ext.data.Record.create([
{name: 'intID', type: 'int'},
{name: 'strBussUnitId', type: 'string'},
{name: 'intCalCount', type: 'int'},
{name: 'strCalType',type: 'string'},
{name: 'strCalDescription', type: 'string'},
{name: 'strCountType', type: 'string'},
{name: 'strCalStart', type: 'string'},
{name: 'strCalEnd', type: 'string'},
{name: 'strCreatedBy', type: 'string'},
{name: 'tmpCreatedDate', type: 'date'},
{name: 'strActive', type: 'string'},
{name: 'tmpInActiveDate', type: 'string'},
{name: 'strCalID', type: 'string'},
{name: 'objBULookUp.strBusinessUnitID', type: 'string'}
]);
// The new DataWriter component.
writer = new Ext.data.JsonWriter({
encode: true,
writeAllFields: true
});
// The new DataReader component.
reader = new Ext.data.JsonReader({
totalProperty: 'total',
successProperty: 'success',
idProperty: 'intID',
root: 'data',
messageProperty: 'message' // <-- New "messageProperty" meta-data
},
businessCalRecord);
proxy = new Ext.data.HttpProxy(new Ext.data.Connection({
api: {read: {url:'businessCalView.do', method: 'GET'}},
autoAbort: true
}));
proxy.addListener('exception', function(proxy, options, response, error, res) {
alert(error);
alert("proxy.addListener");
Ext.Msg.show({
title: 'ERROR',
msg: res.message,
icon: Ext.MessageBox.ERROR,
buttons: Ext.Msg.OK
});
});
proxy.on({
"loadexception": function(proxy, options, response, error) {
alert(response.responseText);
alert("proxy.on");
alert(response.status);
alert(response.message);
}
});
// Typical Store collecting the Proxy, Reader and Writer together.
ds = new Ext.data.Store({
proxy: proxy,
reader: reader,
writer: writer, // <-- plug a DataWriter into the store just as you would a Reader
autoSave: false // <-- false would delay executing create, update, destroy requests until specifically told to do so with some [save] buton.
});
//read the data from simple array
//ds.load();
ds.load({ params: { start: 0, limit: 5} });
var cm = new Ext.grid.ColumnModel([
{header: "id", dataIndex: 'intID',hidden: true},
{header: "Bussiness Unit Id",dataIndex: 'objBULookUp.strBusinessUnitDescription',sortable: true},
{header: "Cal Count", width:80, dataIndex: 'intCalCount', sortable: true},
{header: "Cal Type", width: 100, dataIndex: 'strCalType', sortable: true},
{header: "Cal Description", width: 180, dataIndex: 'strCalDescription', sortable: true},
{header: "Count Type", width: 100, dataIndex: 'strCountType', sortable: true},
{header: "Cal Start", width: 100, dataIndex: 'strCalStart', sortable: true},
{header: "Cal End", width: 100, dataIndex: 'strCalEnd', sortable: true},
{header: "Cal ID", width: 100, dataIndex: 'strCalID', sortable: true}
]);
sm = new Ext.grid.RowSelectionModel({singleSelect:'true'});
sm.addListener('rowselect',onRowClick,this);
var PagingBar = new Ext.PagingToolbar({
pageSize: 5,
store: ds,
displayInfo: true,
displayMsg: 'Displaying topics {0} - {1} of {2}',
emptyMsg: 'No insurers to display'
});
dataGrid = new Ext.grid.GridPanel({applyTo:'readPanel', frame: true,
ds:ds,
cm:cm,
sm:sm,
bbar: PagingBar,
title:'Search Page of Business Cal',
width: 910,
height: 195
});
};
}();
그러나에 대한 코드를 검색 난 @ManyToOne 동일한 코드 작업 벌금을 제거 할 때.
내 문제를 조사하려는 노력에 감사드립니다.
변수 strBussUnitId는 BulookUp 모델에 속하는 BusinessCal 모델의 열입니다. BULookUp 모델은 strBussUnitId를 통해 해당 마스터 테이블 데이터를 사용하여 BusinessCal을 저장하고 저장할 수있는 마스터 데이터 테이블입니다.
우리가 extjs를 사용하는 프런트 엔드에서 Noow 나는 strBussUnitId에 해당하는 strBusinessUnitDescription을 구두화할 숫자 인 strBussUnitId를 표시 할 수 없습니다. 이를 위해 Bullookup 모델로 BusinessCal 모델에서 @manytoOne을 만들었습니다.
BusinessCal 모델에 @manytoOne을 추가 할 때 문제가 발생합니다.
코드와 stacktrace 또는 오류가 있으면 게시하십시오. – Rohit
누군가가 당신을 도울 수 있기 전에 더 많은 세부 사항을 제공해야합니다. JPA 주석을 사용하여 엔티티 클래스를 표시하고 예외 스택 추적을 시작하십시오. – ChssPly76