私は親クラスとして持つオブジェクトFacebookUser.java
とTwitterUser.java
彼らは、私が正しいマッパーを書きたい返さDiscriminatorColumn
を使用して、データベースの種類]列に依存エンティティですmap FacebookUserまたはTwitterUserのインスタンスになるユーザー。MapStruct一般的な地図や子どものマッピングを組み合わせリストは
UserDTO userDto = UserMapper.INSTANCE.map(user);
クラスをマッピングするために:
@Entity
@Table(name = "users")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING, length = 10)
@DiscriminatorValue(value = "Local")
public class User {
@Column
private String firstName;
@Column
private String lastName;
///... setters and getters
}
@Entity
@DiscriminatorValue(value = "Facebook")
public class FacebookUser extends User {
@Column
private String userId;
///... setters and getters
}
@Entity
@DiscriminatorValue(value = "Twitter")
public class TwitterUser extends User {
@Column
private String screenName;
///... setters and getters
}
@Mapper
public interface UserMapper {
public static UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
User map(UserDTO userDTO);
@InheritInverseConfiguration
UserDTO map(User user);
List<UserDTO> map(List<User> users);
FacebookUser map(FacebookUserDTO userDTO);
@InheritInverseConfiguration
FacebookUserDTO map(FacebookUser user);
TwitterUser map(TwitterUserDTO userDTO);
@InheritInverseConfiguration
TwitterUserDTO map(TwitterUser user);
}
は、その後、私は使用します。私が意図したとおり、唯一User
親ではない子供のマッピング作品ではないと思われる以下のマッパーを持っていますDTO:
public class UserDTO {
private String firstName;
private String lastName;
///... setters and getters
}
public class FacebookUserDTO extends UserDTO {
private String userId;
///... setters and getters
}
public class TwitterUserDTO extends UserDTO {
private String screenName;
///... setters and getters
}
私はFacebookのユーザーとTwitterユーザーと混合したユーザーのリスト、または基本的なユーザーがあれば
はまた:
を、私は、次のユーザーがいるとしましょう:
User user = new User ("firstName","lastName");
User fbUser = new FacebookUser ("firstName","lastName","userId");
User twUser = new TwitterUser ("firstName","lastName","screenName");
List<User> users = new ArrayList<>();
users.add(user);
users.add(fbUser);
users.add(twUser);
//Then:
List<UserDTO> dtos = UserMapper.INSTANCE.map(users);
は私だけfirstName
とlastName
ではなくscreenName
を取得しますまたはuserId
。
これにはどのような解決策がありますか?