大家好:
想請教各位大大
以下是我的程式
JAVA 和JSP部分
//JAVA
public List Getdata()
{String sql="select* from product";
Query query=session.createSQLQuery(sql).addEntity(Product.class);
return query.list();
}
//JSP
List <Product> a=log.Getdata();
for(Product num : a)
{out.println(num.getName()+ ", " +num.getPrice());
}
以上程式是OK的
但如果我用2個.addEntity()就會無法在JSP print出來
以下我的程式
//JAVA
public List st()
{
String sql="select{s.*}, {p.*} from stock s left join product p on p.name=s.id ";
Query q= session.createSQLQuery(sql).addEntity("s",Stock.class)
.addEntity("p", Product.class); return q.list();
}
//JSP
List <Object[]> stu=log.st();
for(Object[] obj : stu)
{
Stock s = (Stock)obj[0];
Product p = (Product)obj[1];
out.println(s.getId() + ", " + p.getPrice() );
}
但這樣他就會出現以下訊息
HTTP Status 500 - An exception occurred processing JSP page /a.jsp at line 37
java.lang.NullPointerException
想請問該怎麼改才可以正常
謝謝
以下我參考的文章:
http://www.cnblogs.com/xiaoluo501395377/p/3378355.html
資料中關聯的欄位的值有null導致
我有員工(EMP2)跟部門(DEPT2)表格
關係是多(員工)對一(部門)
兩個表格都有部門NO的欄位
員工表格沒有設定欄位不能null
這時候設定其中一個員工的部門是null
跑程式的時候可以發現因為是null,所以部門的物件值為null
這時候再對部門的物件強轉型取值就會導致nullpoint
再取值的地方做null判斷就可以
舉例
deptvo.getDname()
改成
(deptvo==null?"":deptvo.getDname()) );
就可以
JSP部分改成以下範例就可以 :-)
//JSP
List <Object[]> stu=log.st();
for(Object[] obj : stu)
{
Stock s = (Stock)obj[0];
Product p = (Product)obj[1];
out.println(s.getId() + ", " + (p==null?"":p.getPrice()) );
}
這樣的話是不是我就不用再寫p.name=s.id了?
我看你的表格邏輯,是一定要寫。
因為不寫你會取到其他商品的價格
因為使用left join on p.name=s.id意思就是想得出
我這次www 有7個量,而www的價格是5
而不使用你會得到多個結果www 7個商品量,而www的價格是aaa商品的5 和 zzz的20....
所以一定要用。
null那邊我還是不太明白
造成這個原因是因為資料是髒的
為什麼這麼說因為明明jjj商品有量,但卻沒有價格
,這樣很奇怪。
而java只是如實資料呈現
接著延伸基礎原則,任何null被呼叫方法都會跳出
nullpoint exception
所以准許髒資料,就要在java對null的情況特別處理邏輯
是不是要以product為基準,product有的東西stock才能有阿..?
對,同上個問題回答
假如有其他邏輯再跟我說 :-)
我要找出那些學生同時修A,B課程
使用Inner Join
create TABLE 課程表格 (課程 nvarchar(10),學號 nvarchar(10) );
insert into 課程表格 (課程,學號) values
('A0001','T0023')
,('A0001','T0089')
,('A0001','T0058')
,('A0002','T0023')
,('A0002','T0034')
,('A0002','T0058')
;
select * from (select * from 課程表格 where 課程 = 'A0001') A課程
inner join (select * from 課程表格 where 課程 = 'A0002') B課程 on A課程.學號 = B課程.學號
;
暐翰大大好
那個想請教幾個問題
1.以下是我的資料表
照大大的方法可行,但是我在stock data中加了一行jjj,2就會出現
錯誤碼:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [model.Product#jjj]
是不是要以product為基準,product有的東西stock才能有阿..?
2.null那邊我還是不太明白
String sql="select {s.*}, {p.*} from stock s left join product p on p.name=s.id ";
我都已經寫p.name=s.id那他不會在java端過濾,一定要在JSP上面寫
(p==null?"":p.getPrice())才行,這樣的話是不是我就不用再寫p.name=s.id了?
謝謝大大解答
我上面更新回答了
有問題再跟我說 :-)