If you go this route, the session bean should do the query for existing beans -- not the entity bean.
However, another option is to create a unique key in your database on the three columns. If any bean being created matches an existing one in the database, an exception will be thrown which you can catch and ignore (you're expecting it).
There are two performance differences that I see. First is that the second method results in only one query (an insert) per bean whether or not there is one in the DB already. The second is that performing an insert that fails should be faster than querying for a bean, finding one, and loading it into the container, only to be ignored (the bean's values, anyway).
As well, if this process is being run in multiple threads/applications simultaneously, doing the query before creating the bean leaves a very small but non-zero window of error.
For example, say two threads are both about to create the bean with values { A, B, C }.
Thread 1 queries for bean; none foundThread 2 queries for bean; none foundThread 1 creates beanThread 2 creates bean; exception, bean already there (from thread 1) If only one process is creating these beans at any given time, this is not an issue.
[ January 11, 2005: Message edited by: David Harkness ]