Java 使用Hibernate、Primefaces和Spring更新记录
我正在使用集成Java 使用Hibernate、Primefaces和Spring更新记录,java,spring,hibernate,jakarta-ee,primefaces,Java,Spring,Hibernate,Jakarta Ee,Primefaces,我正在使用集成spring3hibernate4jsf和primefaces。 在我的数据表中,我可以插入和删除记录,但我的更新代码不起作用,无法更新表和数据库。我不想使用primefaces单元格编辑器,我想要一个命令按钮执行更新。但当我单击命令按钮时,它会删除数据库和datatable中的单元格(字段),personel_id字段除外。请帮我找到正确的代码。 编辑字段并单击“更新”按钮时: personelDao.java public class PersonelDao implement
spring3
hibernate4
jsf
和primefaces
。
在我的数据表中,我可以插入
和删除
记录,但我的更新代码不起作用,无法更新表和数据库。我不想使用primefaces单元格编辑器
,我想要一个命令按钮
执行更新。但当我单击命令按钮时,它会删除数据库和datatable中的单元格(字段),personel_id字段除外。请帮我找到正确的代码。
编辑字段并单击“更新”按钮时:
personelDao.java
public class PersonelDao implements IPersonelDao {
private SessionFactory sessionFactory;
public void addPersonel(Personel personel) {
getSessionFactory().getCurrentSession().save(personel);
}
public Personel updatePersonel(Personel personel) {
final Session session = getSessionFactory().getCurrentSession();
if(session.contains(personel)){
session.update(personel);
} else {
personel = (Personel) session.merge(personel);
}
return personel;
}
public void deletePersonel(Personel personel) {
getSessionFactory().getCurrentSession().delete(personel);
}
}
@Transactional(readOnly=true)
public class PersonelService implements IPersonelService{
IPersonelDao personeldao;
@Transactional(readOnly=false)
public void addPersonel(Personel personel) {
getPersoneldao().addPersonel(personel);
}
@Transactional(readOnly=false)
public void updatePersonel(Personel personel){
getPersoneldao().updatePersonel(personel);
}
@Transactional(readOnly=false)
public void deletePersonel(Personel personel) {
getPersoneldao().deletePersonel(personel);
}
}
@ManagedBean(name="personelMB")
@RequestScoped
public class PersonelBean implements Serializable{
private static final long serialVersionUID = 1L;
@ManagedProperty(value="#{PersonelService}")
IPersonelService personelservice;
List<Personel> personelList;
private int personel_id;
private String pname;
private String pfamily;
private String paddress;
private String pphone;
//getter and setter
public void addPersonel(){
Personel personel=new Personel();
personel.setPaddress(getPaddress());
personel.setPersonel_id(getPersonel_id());
personel.setPfamily(getPfamily());
personel.setPname(getPname());
personel.setPphone(getPphone());
getPersonelservice().addPersonel(personel);
reset();
}
public void deletePersonel(int personel_id){
Personel personel=(Personel)personelservice.getPersonelId(personel_id);
getPersonelservice().deletePersonel(personel);
}
public void update(int personel_id){
Personel personel=(Personel)personelservice.getPersonelId(personel_id);
personel.setPaddress(getPaddress());
personel.setPfamily(getPfamily());
personel.setPname(getPname());
personel.setPphone(getPphone());
getPersonelservice().updatePersonel(personel);
}
}
@Entity
@Table(name="TBLPERSONEL")
public class Personel {
@Id
@Column(name="PERSONEL_ID")
private int personel_id;
@Column(name="PNAME")
private String pname;
@Column(name="PFAMILY")
private String pfamily;
@Column(name="PADDRESS")
private String paddress;
@Column(name="PPHONE")
private String pphone;
@OneToOne
@PrimaryKeyJoinColumn
private Manager manager;
@OneToMany(mappedBy="personel")
private Set<Stufftransfer> stufftransfers;
public Personel(){
}
//getter and setter
}
personelservice.java
public class PersonelDao implements IPersonelDao {
private SessionFactory sessionFactory;
public void addPersonel(Personel personel) {
getSessionFactory().getCurrentSession().save(personel);
}
public Personel updatePersonel(Personel personel) {
final Session session = getSessionFactory().getCurrentSession();
if(session.contains(personel)){
session.update(personel);
} else {
personel = (Personel) session.merge(personel);
}
return personel;
}
public void deletePersonel(Personel personel) {
getSessionFactory().getCurrentSession().delete(personel);
}
}
@Transactional(readOnly=true)
public class PersonelService implements IPersonelService{
IPersonelDao personeldao;
@Transactional(readOnly=false)
public void addPersonel(Personel personel) {
getPersoneldao().addPersonel(personel);
}
@Transactional(readOnly=false)
public void updatePersonel(Personel personel){
getPersoneldao().updatePersonel(personel);
}
@Transactional(readOnly=false)
public void deletePersonel(Personel personel) {
getPersoneldao().deletePersonel(personel);
}
}
@ManagedBean(name="personelMB")
@RequestScoped
public class PersonelBean implements Serializable{
private static final long serialVersionUID = 1L;
@ManagedProperty(value="#{PersonelService}")
IPersonelService personelservice;
List<Personel> personelList;
private int personel_id;
private String pname;
private String pfamily;
private String paddress;
private String pphone;
//getter and setter
public void addPersonel(){
Personel personel=new Personel();
personel.setPaddress(getPaddress());
personel.setPersonel_id(getPersonel_id());
personel.setPfamily(getPfamily());
personel.setPname(getPname());
personel.setPphone(getPphone());
getPersonelservice().addPersonel(personel);
reset();
}
public void deletePersonel(int personel_id){
Personel personel=(Personel)personelservice.getPersonelId(personel_id);
getPersonelservice().deletePersonel(personel);
}
public void update(int personel_id){
Personel personel=(Personel)personelservice.getPersonelId(personel_id);
personel.setPaddress(getPaddress());
personel.setPfamily(getPfamily());
personel.setPname(getPname());
personel.setPphone(getPphone());
getPersonelservice().updatePersonel(personel);
}
}
@Entity
@Table(name="TBLPERSONEL")
public class Personel {
@Id
@Column(name="PERSONEL_ID")
private int personel_id;
@Column(name="PNAME")
private String pname;
@Column(name="PFAMILY")
private String pfamily;
@Column(name="PADDRESS")
private String paddress;
@Column(name="PPHONE")
private String pphone;
@OneToOne
@PrimaryKeyJoinColumn
private Manager manager;
@OneToMany(mappedBy="personel")
private Set<Stufftransfer> stufftransfers;
public Personel(){
}
//getter and setter
}
personelbean.java
public class PersonelDao implements IPersonelDao {
private SessionFactory sessionFactory;
public void addPersonel(Personel personel) {
getSessionFactory().getCurrentSession().save(personel);
}
public Personel updatePersonel(Personel personel) {
final Session session = getSessionFactory().getCurrentSession();
if(session.contains(personel)){
session.update(personel);
} else {
personel = (Personel) session.merge(personel);
}
return personel;
}
public void deletePersonel(Personel personel) {
getSessionFactory().getCurrentSession().delete(personel);
}
}
@Transactional(readOnly=true)
public class PersonelService implements IPersonelService{
IPersonelDao personeldao;
@Transactional(readOnly=false)
public void addPersonel(Personel personel) {
getPersoneldao().addPersonel(personel);
}
@Transactional(readOnly=false)
public void updatePersonel(Personel personel){
getPersoneldao().updatePersonel(personel);
}
@Transactional(readOnly=false)
public void deletePersonel(Personel personel) {
getPersoneldao().deletePersonel(personel);
}
}
@ManagedBean(name="personelMB")
@RequestScoped
public class PersonelBean implements Serializable{
private static final long serialVersionUID = 1L;
@ManagedProperty(value="#{PersonelService}")
IPersonelService personelservice;
List<Personel> personelList;
private int personel_id;
private String pname;
private String pfamily;
private String paddress;
private String pphone;
//getter and setter
public void addPersonel(){
Personel personel=new Personel();
personel.setPaddress(getPaddress());
personel.setPersonel_id(getPersonel_id());
personel.setPfamily(getPfamily());
personel.setPname(getPname());
personel.setPphone(getPphone());
getPersonelservice().addPersonel(personel);
reset();
}
public void deletePersonel(int personel_id){
Personel personel=(Personel)personelservice.getPersonelId(personel_id);
getPersonelservice().deletePersonel(personel);
}
public void update(int personel_id){
Personel personel=(Personel)personelservice.getPersonelId(personel_id);
personel.setPaddress(getPaddress());
personel.setPfamily(getPfamily());
personel.setPname(getPname());
personel.setPphone(getPphone());
getPersonelservice().updatePersonel(personel);
}
}
@Entity
@Table(name="TBLPERSONEL")
public class Personel {
@Id
@Column(name="PERSONEL_ID")
private int personel_id;
@Column(name="PNAME")
private String pname;
@Column(name="PFAMILY")
private String pfamily;
@Column(name="PADDRESS")
private String paddress;
@Column(name="PPHONE")
private String pphone;
@OneToOne
@PrimaryKeyJoinColumn
private Manager manager;
@OneToMany(mappedBy="personel")
private Set<Stufftransfer> stufftransfers;
public Personel(){
}
//getter and setter
}
仅在方法中定义事务性并分配传播,如果在类上定义“transactional”,则这适用于所有方法 personelservice.java的更改:
//@Transactional(readOnly=true)
public class PersonelService implements IPersonelService{
IPersonelDao personeldao;
@Transactional(propagation=Propagation.REQUIRED)
public void addPersonel(Personel personel) {
getPersoneldao().addPersonel(personel);
}
@Transactional(propagation=Propagation.REQUIRED)
public void updatePersonel(Personel personel){
getPersoneldao().updatePersonel(personel);
}
@Transactional(propagation=Propagation.REQUIRED)
public void deletePersonel(Personel personel) {
getPersoneldao().deletePersonel(personel);
}
}
雷加特
马努·纳瓦罗
PS:请原谅我的英语小流体为防止更新时出现会话丢失问题,dao中的更改:
public class PersonelDao implements IPersonelDao {
...
public Personel updatePersonel(Personel personel) {
final Session session = getSessionFactory().getCurrentSession();
if(session.contains(personel)){
session.update(personel);
} else {
personel = (Personel) session.merge(personel);
}
return personel;
}
...
}
因此,如果实体不在会话中,将强制将其与合并链接
您还必须检索合并返回的对象,您可能必须强制并更改内存中的引用
问候,亲爱的马努,谢谢你的回复。我照你说的做了,但我的问题没有解决。亲爱的马努,谢谢你的关注。但它也不起作用。我真的很困惑。当我编辑数据表单元格并单击“更新命令”按钮时,数据将从数据库和数据表行中删除。Manu,我已经编辑了添加跟踪后的日志。请你看一下好吗。特别感谢在调试模式下启动它,希望传递正确的行,如果它给出错误,附加的错误和发生错误的行。我的英语水平不够,你会说西班牙语吗?现在我不能,我可以在8小时内,20:00 UTC+1