It may be that your example here is oversimplified and in fact your real-life B and C are different. In that case there are several possibilities:
* if the overall width of the rows in B and C isn't very large, you could just put all the columns into A, and simply use NULL for irrelevant columns on any particular row. Then you have just one table and the querying is easy.
* if you do use the three tables as you describe, you can use a query with two left outer joins (from A to B and from A to C). This isn't as efficient as you might like though.
* Some relational databases have "object/relational" features which might solve your problem but in a very non-portable way.
* you might consider using an object/relational mapping tool. What you really have on the
Java side is a little inheritance hierarchy, and the O/R mappers will work out the appropriate queries for you. (This choice only makes sense if you move all or almost all of you app over to use the tool.)