I have table A:
@Entity
@Table(name = "A")
public class A{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false, updatable = false)
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "message_id")
private Message;
}
I have a table Message:
@Entity
@Table(name="message")
@Getter
@Setter
public class Message{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false, updatable = false)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "account_id", foreignKey = @ForeignKey(name = "FK_account_to_message"))
private Account account; //and then search by Account.id
}
In my service I get all A objects by:
List<A> aObjects = ARepository.findByMessage_Account_Id(user.getId())
So I want to get all A
objects which have such Message
fields that Message
fields have such Account
fields that Account.id == user.getId()
Now I have additional type of A
entity - without any relation to Message
because now object A can be created by uploading an Excel file (reading data from a file and saving in database, so in this case we don't have Message
data that can be added in Message
column). So I have to store new A
objects in A
table but with empty column Message
BUT with additional column -> user_id
-> currently that's the parameter to find all A
objects (ARepository.findByMessage_Account_Id(user.getId())
)
The question is how/where to store A
objects that differ in Message
column (empty, no relationship to Message table).
I thought about Single Table Inheritance
with Discriminator value
but in this case when I want to find all A
objects by user_id I would have to prepare one bigger select like: get all A objects from A where A.Message.Account.id = user_id or A.user_id = user_id
.
Is it a good approach? Or maybe should I use something different?