1) use limitToList="true" at that button.
2) It's not a RichFaces problem. Just according to JSF specification and dataTable impl - value for the table called two times. On decode(to process changes and queue needed events) and on rendering(to render new data) . So it's just wrong to point the table to the getter which will just call the SQL statement. Checkout richfaces-demo sources and look for example to that one http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?tab=modifiableDataModel&cid=11226 . It's shows proper model implementation using hibernate.