对象映射JPA / openEJB用于数据库

时间:2014-12-08 08:48:29

标签: java mysql java-ee jpa openejb

大家好我想让我的班级坚持到我的数据库但是我遇到了一个问题我不知道如何解决。我试图用我的用户映射得分的三个实例,但我不确定如何使这个工作。任何帮助表示赞赏。谢谢:))

用户类Snipit。

@Column(name="userName", unique=true)
private String username;
@Column(name="password")
private String password;

//I am not sure how to map the three fields below.
private Score highestScore; 
private Score averageScore; 
private Score lowestScore;

3 个答案:

答案 0 :(得分:1)

虽然这里有一个已接受的答案,但我没有看到建议的映射如何区分高,低和平均分数?

你可以考虑使用如下所示的地图,其中得分表将有一个列" score_type'可以映射到Enum' ScoreType':

public class User{  

    @Column(name="userName", unique=true)
    private String username;

    @Column(name="password")
    private String password;

    @OneToMany
    @MapKeyColumn(name="score_type")
    @MapKeyEnumerated
    private Map<ScoreType, Score> scores; 

    public Score getHighScore(){
        return scores.get(ScoreType.HIGH);
    }

    public void setScore(Score score){
        score.setUser(this);
        scores.put(score.getType(), score);
    }
}

public class Score{

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    @Column(name = "type")
    @Enumerated(EnumType.String)//or ordinal
    private ScoreType type;
}

答案 1 :(得分:0)

如果分数与数据库无关,请使用@Transient注释进行分数

如果得分与数据库相关,则使用映射注释,如@OneToOne,@ OneToMany(取决于您的数据库基数)

编辑: 如果得分与数据库表有关,恕我直言最简单的方法就是让IDE自动从数据库为你生成实体 (但有时IDE会生成不需要的映射,因此您仍需要检查它)

如果你使用eclipse Generating entities from tables

如果您使用netbeans Adding Entity Classes

但您仍需要了解Multiplicity in Entity Relationships

答案 2 :(得分:0)

在我看来,用户有一个分数,分数有一个用户。所以@OneToOne用户是拥有者并且是双向的。

代码应该是这样的

得分:

@OneToOne(mappedBy = "score")
private User user

在用户中:

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@PrimaryKeyJoinColumn
private Score highestScore;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@PrimaryKeyJoinColumn
private Score averageScore;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@PrimaryKeyJoinColumn
private Score lowestScore;