How to represent a 1..n relationship in Java
java
Solution
I see why you dislike the solution.
You are only storing the information once, but you have to update changes in both classes.
If you change the `Band` of a `CD`, you have to remove the `CD` from the old `Band`, set the `Band` in the `CD`, then add it to the new `Band`.
That is of course complicated and prone to error.
Your classes don't have simple getters/setters. Instead, you have to implement a lot of logic in your domain classes to keep consistency.
The advantage is, of course, that you always have a the `Band` of a `CD` accessible and vice versa. Its a trade-off. A neccesary one, should you, for example, use a `CD`'s `Band` as part of its `equals` implementation.
Here is an interesting alternative, that may be advantegous in some situations:
Use your classes `Band` and `CD` only as simple POJOs and use another class (i.e. `MusicService`) to resolve the relation:
class MusicService {
Band getBand(CD cd);
List<CD> getCDs(Band band);
addCD(Band band, CD cd);
}
- Advantages: Separation of concerns, stateless services
- Disadvantage: More code
Problem
Let's say I have two classes: one for Band and one for CD. I want to be able to access easily all CD from one Band and to find the Band of a CD. My solution is to have a field `Band` in CD, and a `ArrayList<CD>` in Band. But I don't find this is a good solution. Does anyone know of a better design for this scenario?