我为我的实体创建了DAO。现在我遇到了一个问题:我需要在某些方法中传递另一个对象的字段。例如:
@Override
public void updateById(PriceTrack priceTrack, int id) throws DBException {
PreparedStatement ps = null;
try {
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
conn.setAutoCommit(false);
ps = conn.prepareStatement(UPDATE_BY_ID);
ps.setInt(1, priceTrack.getOldPrice());
ps.setInt(2, priceTrack.getNewPrice());
ps.setDate(3, new java.sql.Date(priceTrack.getLastUpdatedPrice().getTime()));
// todo - pass Appartment id
ps.setObject(4, new Apartment());
ps.executeUpdate();
conn.commit();
} catch (SQLException e) {
JdbcUtils.rollbackQuitely(conn);
throw new DBException("Cannot execute SQL = '" + UPDATE_BY_ID + "'", e);
} finally {
JdbcUtils.closeQuitely(ps);
JdbcUtils.closeQuitely(conn);
}
}
这里我需要传递相应的Aparment_id
值。创建new Apartment()
是错误的。
UPDATE_BY_ID
的内容:
public static final String UPDATE_BY_ID = "UPDATE price_track SET old_price=?, new_price=?, lastupdated_price=?, apartment_id=?";
最好的方法是什么?
这也是显示连接的图表。
答案 0 :(得分:1)
如果您对越来越多的论点感到担忧,可能会有解决方案
您选择哪种情况取决于您获取数据的方式以及将来获取更多字段的预期
答案 1 :(得分:1)
如果您只想更新old_price
,new_price
或lastupdated_price
,则不一定更新aparment_id
,因为它是外键。假设它不会改变是合乎逻辑的。您可以从查询中删除aparment_id
:
UPDATE price_track SET old_price=?, new_price=?, lastupdated_price=?
并从代码中正确删除ps.setObject(4, new Apartment());
。
JDBC需要手动配置,它不会自动执行任何操作。
答案 2 :(得分:1)
更好的方法是创建对象初始化它并将其传递给DAO 为此使用pojo类
class PriceTrack{
int id;
doulbe price;
//and relation ship between price and apartment 1:1 or 1:n
Set apartment=new HashSet(0);
//getter and setter
}
class Apartment{
int id;
int room;
String description;
//and relation ship between apartment and price 1:1 or 1:n
}
public static void main(String s[])
{
PriceTrack priceTrack=new PriceTrack();
priceTrack.setId(23);
priceTrack.setPrice(2389);
Apartment a=new Apartment();
a.setRoom(3);
a.setDescription("good rooms");
Set s=new HashSet();
s.add(a);
priceTrack.setApartment(s);
//now send It to the DAO method
DAO.updateById(priceTrack);
}