【发布时间】:2017-08-23 00:21:54
【问题描述】:
表关系参考图
由于新手的限制,从银行jsp页面提交后,从卡jsp提交后都在一张图片中
我也是 stackoverflow 的新手SPRING。我试图用外键概念创建两个表。我遵循了一些关于 stackoverflow 以及其他资源丰富的网站的示例,并设法创建了两个具有一对多关系的表。但问题是当我从卡片 jsp 页面提交时,我必须获取 cart_id 列下的第一行 id。相反,从卡 jsp 页面提交后,在 bankadmin 表下创建了新行,并且它的 id 被返回。我很困惑,不知道如何纠正解决这个问题。请善待并指导我。而且我一直在stackoverflow中搜索一周,找不到任何对我有帮助的东西。提前致谢。
银行管理员模型
@Entity
@Table(name = "bankAdmin")
public class bankAdmin implements Serializable{
@GeneratedValue(strategy=GenerationType.AUTO)
@Column (name = "bcode", nullable=false)
@Id private int bcode;
@Column (name = "bname")
private String bname;
@Column (name = "address")
private String address;
@Column (name = "phno")
private int phno;
@OneToMany(mappedBy="bankAdmin",cascade = CascadeType.ALL)
private Set<Cards> cards;
卡片模型
@Entity
@Table(name = "cards")
public class Cards implements Serializable {
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="cname", unique=true)
@Id private int cname;
@Column (name = "ctype")
private String ctype;
@Column (name = "min_sal")
private int min_sal;
@Column (name = "year_fee")
private int year_fee;
@Column (name = "rewards")
private String rewards;
@Column (name = "jperks")
private String jperks;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="cart_id", nullable=false)
private bankAdmin bankAdmin;
public Cards(){}
public Cards(String ctype, int min_sal, int year_fee, String rewards, String jperks, bankAdmin b){//int cname,
this.ctype=ctype;
this.min_sal=min_sal;
this.year_fee=year_fee;
this.jperks=jperks;
this.rewards=rewards;
this.bankAdmin=b;
}
public bankAdmin getBankAdmin() {
return bankAdmin;
}
public void setBankAdmin(bankAdmin bankAdmin) {
this.bankAdmin = bankAdmin;
}
CardDaoImpl
public class CardsDaoImpl implements CardsDao{
@Autowired
SessionFactory sessionfactory;
public void save(Cards cards) {
Session session = null;
Transaction tx = null;
try
{
session = this.sessionfactory.openSession();
tx = session.beginTransaction();
bankAdmin bankadmin =new bankAdmin(); //=null;
String _ctype = cards.getctype();
int _min_sal = cards.getmin_sal();
int _year_fee = cards.getyear_fee();
String _rewards = cards.getrewards();
String _jperks = cards.getjperks();
Set<Cards> card = new HashSet<Cards>();
Cards config = new Cards(_ctype,_min_sal,_year_fee,_rewards,_jperks,bankadmin);
card.add(config);
bankadmin.setcards(card);
// System.out.println("bankadmin: before " + bankadmin);
// bankadmin.setbname(bankadmin.getbname());// "SBI"
// bankadmin.setphno(bankadmin.getphno());//1234567890
// bankadmin.setaddress(bankadmin.getaddress());//Bengaluru
// System.out.println("bankadmin: after " + bankadmin);
// int _cname = cards.getcname();
// int bankadmin = bankadmin.getbcode();
//_cname,_ctype,_min_sal,_year_fee,_rewards,_jperks,bankadmin
// card.add(config);
// config.setBankAdmin(cards.getBankAdmin(bankadmin));
// config.setcname(cards.getcname());
// config.setctype(cards.getctype());
// config.setmin_sal(cards.getmin_sal());
// config.setyear_fee(cards.getyear_fee());
// config.setrewards(cards.getrewards());
// config.setjperks(cards.getjperks());
// config.setBankAdmin(cards.getBankAdmin());
session.save(bankadmin);
session.save(config);
tx.commit();
}
catch (HibernateException e)
{
e.printStackTrace();
}
finally
{
session.close();
}
}
// get lms lights config from DB
public List<Cards> Ccards() {
Session session = null;
// Transaction tx = null;
List<Cards> Ccards = null;
try{
session = this.sessionfactory.openSession();
Ccards = session.createQuery("FROM Cards").list();
System.out.println("cards dao impl executed...");
System.out.println("cards config : "+ Ccards.toString());
}
catch (Exception e)
{
System.out.println("bankAdmin Dao impl Ex : " + e);
}
finally
{
session.close();
}
return Ccards;
}
}
BankDaoImpl
public class bankAdminDaoImpl implements bankAdminDao{
@Autowired
SessionFactory sessionfactory;
public void save(bankAdmin badmin) {
Session session = null;
Transaction tx = null;
try
{
session = this.sessionfactory.openSession();
tx = session.beginTransaction();
// bankAdmin bankadmin = new bankAdmin();
bankAdmin config = new bankAdmin();
config.setbcode(badmin.getbcode());
config.setbname(badmin.getbname());
config.setaddress(badmin.getaddress());
config.setphno(badmin.getphno());
session.save(config);//save//persist
tx.commit();
}
catch (HibernateException e)
{
e.printStackTrace();
}
finally
{
session.close();
}
}
// get lms lights config from DB
public List<bankAdmin> BbankAdmin() {
Session session = null;
// Transaction tx = null;
List<bankAdmin> BbankAdmin = null;
try{
session = this.sessionfactory.openSession();
BbankAdmin = session.createQuery("FROM bankAdmin").list();
System.out.println("bankAdmin dao impl executed...");
System.out.println("bankAdmin config : "+ BbankAdmin.toString());
}
catch (Exception e)
{
System.out.println("bankAdmin Dao impl Ex : " + e);
}
finally
{
session.close();
}
return BbankAdmin;
}
}
【问题讨论】:
-
我很想帮助你,但我现在没有时间,所以我稍后会回来。您在银行数据库中得到一个 id 为 2 的空条目,因为您在
CardDaoImpl.save()中创建了一个新的bankAdmin。您正在创建没有任何属性的对象,这就是它在您的数据库中为空的原因。您要做的是找到 id 为 1 的银行,创建一张新卡,然后关联这两个对象,然后保存该对象。 -
能否请您发布数据库结构的 SQL 转储?
-
@kkflf ,老实说,当我使用 Windows 10 时,我不知道如何转储数据库结构。所有示例都与 Linux shell 有关。关于两个对象的关联,我怎样才能找到 ID 为 1 的银行?由于这与“bankAdmin bankadmin”类有关,因此无法将查询强制转换为 bankAdmin 。此外,如果我单独使用查询,则银行管理员将不会映射到此查询。我一直在努力。
-
安装mysql工作台。您可以在那里创建结构的数据库转储。这是最简单的方法,除非您可以从 cmd 或 powershell 访问 mysql 二进制文件。你试过我上面的建议了吗?
-
删除表如果存在
bankadmin; /*!40101 SET @saved_cs_client = @@character_set_client /; /!40101 SET character_set_client = utf8 */;创建表bankadmin(bcodeint(11) NOT NULL AUTO_INCREMENT,addressvarchar(255) 默认空,bnamevarchar(255) 默认空,phnoint(11) 默认空, 主键 (bcode) ) 引擎=InnoDB AUTO_INCREMENT=3 默认字符集=utf8; @kkflf
标签: java mysql spring hibernate jsp