Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 对tableview单元格的编辑丢失_Jpa_Javafx_Tableview_Persistence - Fatal编程技术网

Jpa 对tableview单元格的编辑丢失

Jpa 对tableview单元格的编辑丢失,jpa,javafx,tableview,persistence,Jpa,Javafx,Tableview,Persistence,我有一个简单的JavaFXTableView,它由JPA数据库查询填充。我有一个列设置为可编辑,这是可行的。但是,在单元格中进行更改后,只要我在TableView中进行排序甚至导航,更改就会消失。另外,如何将这些编辑保留回数据库 以下是FXML文件及其控制器: <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.net.*?> <?import java

我有一个简单的JavaFXTableView,它由JPA数据库查询填充。我有一个列设置为可编辑,这是可行的。但是,在单元格中进行更改后,只要我在TableView中进行排序甚至导航,更改就会消失。另外,如何将这些编辑保留回数据库

以下是FXML文件及其控制器:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.cell.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="600.0" prefWidth="800.0" styleClass="mainFxmlClass" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.IXS.synergyixs.ingestor.ViewUsersController">
    <stylesheets>
        <URL value="@/styles/IssueTrackingLite.css" />
    </stylesheets>
    <children>
        <TableView fx:id="loginsTable" editable="true" prefHeight="593.0" prefWidth="794.0">
            <columns>
                <TableColumn fx:id="idCol" editable="false" text="Id">
                </TableColumn>
                <TableColumn fx:id="loginCol" text="Login">
                </TableColumn>
                <TableColumn fx:id="partyCol" editable="false" text="Party ID">
                </TableColumn>
                <TableColumn fx:id="creatorCol" editable="false" text="Creator ID">
                </TableColumn>
                <TableColumn fx:id="modifierCol" editable="false" text="Modifier ID">
                </TableColumn>
            </columns>
        </TableView>
    </children>
</AnchorPane>
package com.IXS.synergyixs.ingestor;

import com.IXS.synergyixs.ingestor.data.Usr;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.Pane;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 * FXML Controller class
 *
 * @author Owner
 */
public class ViewUsersController implements Initializable {

    public EntityManagerFactory emf = Persistence.createEntityManagerFactory("com.mycompany_SynergyIXS-Ingestor_jar_1.0-SNAPSHOTPU");
    public EntityManager em = emf.createEntityManager();

    public ObservableList<Usr> tableData;
    public Usr currentUsr;
    /**
     * Initializes the controller class.
     */
    @FXML
    private Pane rootPane;
    @FXML
    private TableView<Usr> loginsTable;

    @FXML
    private TableColumn<Usr, Number> idCol;

    @FXML
    private TableColumn<Usr, String> loginCol;

    @FXML
    private TableColumn<Usr, Number> partyCol;

    @FXML
    private TableColumn<Usr, Number> creatorCol;

    @FXML
    private TableColumn<Usr, Integer> modifierCol;

    @Override
    public void initialize(URL location, ResourceBundle resources) {

        /* to verify query is returning data
        for (Usr u : userList) {
            System.out.println(u.getId() + " " + u.getLogin());
        }
         */
        idCol.setCellValueFactory(new PropertyValueFactory<>("id"));

        loginCol.setCellValueFactory(new PropertyValueFactory<>("login"));
        loginCol.setCellFactory(TextFieldTableCell.forTableColumn‌());

        partyCol.setCellValueFactory(new PropertyValueFactory<>("partyId"));

        creatorCol.setCellValueFactory(new PropertyValueFactory<>("creatorId"));

        modifierCol.setCellValueFactory(new PropertyValueFactory<>("modifierId"));
        updateUserList();
        loginsTable.setItems(tableData);
    }

    public void updateUserList() {
        List<Usr> userList = em.createNamedQuery("Usr.findAll").getResultList();
        if (tableData == null) {
            tableData = FXCollections.observableArrayList(userList);
        } else {
            tableData.clear();
            tableData.addAll(userList);
        }
    }
    /*
    public void saveUser()
    {
        em.getTransaction().begin();
        em.persist(currentUsr);
        em.getTransaction().commit();
        updateUserList();
    }
     */
}​

控制员:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.cell.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="600.0" prefWidth="800.0" styleClass="mainFxmlClass" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.IXS.synergyixs.ingestor.ViewUsersController">
    <stylesheets>
        <URL value="@/styles/IssueTrackingLite.css" />
    </stylesheets>
    <children>
        <TableView fx:id="loginsTable" editable="true" prefHeight="593.0" prefWidth="794.0">
            <columns>
                <TableColumn fx:id="idCol" editable="false" text="Id">
                </TableColumn>
                <TableColumn fx:id="loginCol" text="Login">
                </TableColumn>
                <TableColumn fx:id="partyCol" editable="false" text="Party ID">
                </TableColumn>
                <TableColumn fx:id="creatorCol" editable="false" text="Creator ID">
                </TableColumn>
                <TableColumn fx:id="modifierCol" editable="false" text="Modifier ID">
                </TableColumn>
            </columns>
        </TableView>
    </children>
</AnchorPane>
package com.IXS.synergyixs.ingestor;

import com.IXS.synergyixs.ingestor.data.Usr;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.Pane;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 * FXML Controller class
 *
 * @author Owner
 */
public class ViewUsersController implements Initializable {

    public EntityManagerFactory emf = Persistence.createEntityManagerFactory("com.mycompany_SynergyIXS-Ingestor_jar_1.0-SNAPSHOTPU");
    public EntityManager em = emf.createEntityManager();

    public ObservableList<Usr> tableData;
    public Usr currentUsr;
    /**
     * Initializes the controller class.
     */
    @FXML
    private Pane rootPane;
    @FXML
    private TableView<Usr> loginsTable;

    @FXML
    private TableColumn<Usr, Number> idCol;

    @FXML
    private TableColumn<Usr, String> loginCol;

    @FXML
    private TableColumn<Usr, Number> partyCol;

    @FXML
    private TableColumn<Usr, Number> creatorCol;

    @FXML
    private TableColumn<Usr, Integer> modifierCol;

    @Override
    public void initialize(URL location, ResourceBundle resources) {

        /* to verify query is returning data
        for (Usr u : userList) {
            System.out.println(u.getId() + " " + u.getLogin());
        }
         */
        idCol.setCellValueFactory(new PropertyValueFactory<>("id"));

        loginCol.setCellValueFactory(new PropertyValueFactory<>("login"));
        loginCol.setCellFactory(TextFieldTableCell.forTableColumn‌());

        partyCol.setCellValueFactory(new PropertyValueFactory<>("partyId"));

        creatorCol.setCellValueFactory(new PropertyValueFactory<>("creatorId"));

        modifierCol.setCellValueFactory(new PropertyValueFactory<>("modifierId"));
        updateUserList();
        loginsTable.setItems(tableData);
    }

    public void updateUserList() {
        List<Usr> userList = em.createNamedQuery("Usr.findAll").getResultList();
        if (tableData == null) {
            tableData = FXCollections.observableArrayList(userList);
        } else {
            tableData.clear();
            tableData.addAll(userList);
        }
    }
    /*
    public void saveUser()
    {
        em.getTransaction().begin();
        em.persist(currentUsr);
        em.getTransaction().commit();
        updateUserList();
    }
     */
}​
package com.IXS.synergyixs.ingestor;
导入com.IXS.synergyixs.ingestor.data.Usr;
导入java.net.URL;
导入java.util.List;
导入java.util.ResourceBundle;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.PropertyValueFactory;
导入javafx.scene.control.cell.TextFieldTableCell;
导入javafx.scene.layout.Pane;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.persistence;
/**
*FXML控制器类
*
*@作者所有者
*/
公共类ViewUsersController实现可初始化{
public EntityManagerFactory emf=Persistence.createEntityManagerFactory(“com.mycompany\u SynergyIXS-Ingestor\u jar\u 1.0-SNAPSHOTPU”);
public EntityManager em=emf.createEntityManager();
公共可观察列表数据;
公共Usr当前Usr;
/**
*初始化控制器类。
*/
@FXML
专用窗格根窗格;
@FXML
私有表视图登录表;
@FXML
私有表列idCol;
@FXML
私有表列loginCol;
@FXML
私家车;
@FXML
私有表列创建工具;
@FXML
私有表列修饰符COL;
@凌驾
公共void初始化(URL位置、ResourceBundle资源){
/*验证查询是否正在返回数据
用于(Usr u:userList){
System.out.println(u.getId()+“”+u.getLogin());
}
*/
idCol.setCellValueFactory(新属性ValueFactory(“id”);
loginCol.setCellValueFactory(新属性ValueFactory(“登录”);
loginCol.setCellFactory(TextFieldTableCell.forTableColumn‌());
partyCol.setCellValueFactory(新属性ValueFactory(“partyId”));
creatorCol.setCellValueFactory(新属性ValueFactory(“creatorId”);
modifierCol.setCellValueFactory(新属性值工厂(“modifierId”);
updateUserList();
loginsTable.setItems(tableData);
}
public void updateUserList(){
List userList=em.createNamedQuery(“Usr.findAll”).getResultList();
如果(tableData==null){
tableData=FXCollections.observableArrayList(用户列表);
}否则{
tableData.clear();
tableData.addAll(用户列表);
}
}
/*
public void saveUser()
{
em.getTransaction().begin();
em.persist(currentUsr);
em.getTransaction().commit();
updateUserList();
}
*/
}​
Usr等级:

package com.IXS.synergyixs.ingestor.data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Owner
 */
@Entity
@Table(name = "USR", catalog = "", schema = "ADMIN")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Usr.findAll", query = "SELECT u FROM Usr u")
    , @NamedQuery(name = "Usr.findById", query = "SELECT u FROM Usr u WHERE u.id = :id")
    , @NamedQuery(name = "Usr.findAllLogin", query = "SELECT u.login FROM Usr u")
    , @NamedQuery(name = "Usr.findByLogin", query = "SELECT u FROM Usr u WHERE u.login = :login")
    , @NamedQuery(name = "Usr.findByPwd", query = "SELECT u FROM Usr u WHERE u.pwd = :pwd")
    , @NamedQuery(name = "Usr.findByPartyId", query = "SELECT u FROM Usr u WHERE u.partyId = :partyId")
    , @NamedQuery(name = "Usr.findByCreatorId", query = "SELECT u FROM Usr u WHERE u.creatorId = :creatorId")
    , @NamedQuery(name = "Usr.findByCreationDttm", query = "SELECT u FROM Usr u WHERE u.creationDttm = :creationDttm")
    , @NamedQuery(name = "Usr.findByModifierId", query = "SELECT u FROM Usr u WHERE u.modifierId = :modifierId")
    , @NamedQuery(name = "Usr.findByModificationDttm", query = "SELECT u FROM Usr u WHERE u.modificationDttm = :modificationDttm")})
public class Usr implements Serializable {

    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @Basic(optional = false)
    @Column(name = "ID")
    private BigDecimal id;
    @Basic(optional = false)
    @Column(name = "LOGIN")
    private String login;
    @Basic(optional = false)
    @Column(name = "PWD")
    private String pwd;
    @Column(name = "PARTY_ID")
    private BigInteger partyId;
    @Basic(optional = false)
    @Column(name = "CREATOR_ID")
    private BigInteger creatorId;
    @Basic(optional = false)
    @Column(name = "CREATION_DTTM")
    @Temporal(TemporalType.TIMESTAMP)
    private Date creationDttm;
    @Basic(optional = false)
    @Column(name = "MODIFIER_ID")
    private BigInteger modifierId;
    @Basic(optional = false)
    @Column(name = "MODIFICATION_DTTM")
    @Temporal(TemporalType.TIMESTAMP)
    private Date modificationDttm;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usr")
    private List<UsrAppRole> usrAppRoleList;

    public Usr() {
    }

    public Usr(BigDecimal id) {
        this.id = id;
    }

    public Usr(BigDecimal id, String login, String pwd, BigInteger creatorId, Date creationDttm, BigInteger modifierId, Date modificationDttm) {
        this.id = id;
        this.login = login;
        this.pwd = pwd;
        this.creatorId = creatorId;
        this.creationDttm = creationDttm;
        this.modifierId = modifierId;
        this.modificationDttm = modificationDttm;
    }

    public BigDecimal getId() {
        return id;
    }

    public void setId(BigDecimal id) {
        this.id = id;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public BigInteger getPartyId() {
        return partyId;
    }

    public void setPartyId(BigInteger partyId) {
        this.partyId = partyId;
    }

    public BigInteger getCreatorId() {
        return creatorId;
    }

    public void setCreatorId(BigInteger creatorId) {
        this.creatorId = creatorId;
    }

    public Date getCreationDttm() {
        return creationDttm;
    }

    public void setCreationDttm(Date creationDttm) {
        this.creationDttm = creationDttm;
    }

    public BigInteger getModifierId() {
        return modifierId;
    }

    public void setModifierId(BigInteger modifierId) {
        this.modifierId = modifierId;
    }

    public Date getModificationDttm() {
        return modificationDttm;
    }

    public void setModificationDttm(Date modificationDttm) {
        this.modificationDttm = modificationDttm;
    }

    @XmlTransient
    public List<UsrAppRole> getUsrAppRoleList() {
        return usrAppRoleList;
    }

    public void setUsrAppRoleList(List<UsrAppRole> usrAppRoleList) {
        this.usrAppRoleList = usrAppRoleList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usr)) {
            return false;
        }
        Usr other = (Usr) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.mycompany.synergyixs.ingestor.Usr[ id=" + id + " ]";
    }

}
package com.IXS.synergyixs.ingestor.data;
导入java.io.Serializable;
导入java.math.BigDecimal;
导入java.math.biginger;
导入java.util.Date;
导入java.util.List;
导入javax.persistence.Basic;
导入javax.persistence.CascadeType;
导入javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.Id;
导入javax.persistence.namedquerys;
导入javax.persistence.NamedQuery;
导入javax.persistence.OneToMany;
导入javax.persistence.Table;
导入javax.persistence.Temporal;
导入javax.persistence.TemporalType;
导入javax.xml.bind.annotation.XmlRootElement;
导入javax.xml.bind.annotation.XmlTransient;
/**
*
*@作者所有者
*/
@实体
@表(name=“USR”,catalog=“”,schema=“ADMIN”)
@XmlRootElement
@命名查询({
@NamedQuery(name=“Usr.findAll”,query=“从Usr u中选择u”)
,@NamedQuery(name=“Usr.findById”,query=“从Usr u中选择u,其中u.id=:id”)
,@NamedQuery(name=“Usr.findallogin”,query=“SELECT u.login FROM Usr u”)
,@NamedQuery(name=“Usr.findByLogin”,query=“从Usr u中选择u,其中u.login=:login”)
,@NamedQuery(name=“Usr.findByPwd”,query=“从Usr u中选择u,其中u.pwd=:pwd”)
,@NamedQuery(name=“Usr.findByPartyId”,query=“从Usr u中选择u,其中u.partyId=:partyId”)
,@NamedQuery(name=“Usr.findByCreatorId”,query=“从Usr u中选择u,其中u.creatorId=:creatorId”)
,@NamedQuery(name=“Usr.findbycreationdtm”,query=“从Usr u中选择u,其中u.creationDttm=:creationDttm”)
,@NamedQuery(name=“Usr.findByModifierId”,query=“从Usr u中选择u,其中u.modifierId=:modifierId”)
,@NamedQuery(name=“Usr.findbymodificationdtm”,query=“从Usr u中选择u,其中u.modificationDttm=:modificationDttm”))
公共类Usr实现了可序列化{
私有静态最终长serialVersionUID=1L;
//@马克斯(value =?)@ min(value=?)/ /如果您知道小数域的范围,请考虑使用这些注释来执行字段验证。
@身份证
@基本(可选=假)
@列(name=“ID”)
私有双十进制id;
@基本(可选=假)
@列(name=“LOGIN”)
私有字符串登录;
@基本(可选=假)
@列(name=“PWD”)
私有字符串pwd;
@列(name=“PARTY\u ID”)
私有大整数partyId;
@基本(可选=假)
@列(name=“CREATOR\u ID”)
私有BigInteger创建者ID;
@基本(可选=假)
@列(name=“CREATION\u DTTM”)
@时态(TemporalType.TIMESTAMP)
私人日期创建TTM;
@基本(可选=假)
@列(name=“MODIFIER\u ID”)
公共关系