Bean Managed Persistence

last modified: December 31, 2010

Describe BeanManagedPersistence here: SQL CRUD is hard coded into a BMP entity bean (as opposed to using a deployment descriptor)

"Even to access an entity by its primary key, you have to go twice to the database."

Unless you add the ejbLoad() I do not think you have to go twice to the database:

public String ejbFindByPrimaryKey(String primaryKey) throws FinderException {

boolean haveResult = false;        //...
String query  = "select id  from CUSTOMER  where id = ? ";
PreparedStatement prepStatement = connection.prepareStatement(query);
prepStatement.setString(1, primaryKey);
haveResult = prepStatement.execute();    //...     
if (! haveResult) {
        throw new ObjectNotFoundException("No record found for Customer id: " + primaryKey );
        },  
return primaryKey;

The ejbLoad() call might be considered Lazy Initialization.

Unless ejbLoad() is called you don't have access to the Entity Bean by definition. So ejbLoad() will be called in 99% of the cases following the ejbFindByPrimaryKey(). Why do you think clients call ejbFindByPrimaryKey(), just to discard the resulting reference?

The N+1 hits was pretty silly - I cant defend that one.

Dave Hunter


Loading...