gpt4 book ai didi

java - 使用 Ebean 映射字符串和枚举集合(Play 2.0)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:02:10 32 4
gpt4 key购买 nike

我在映射实体中的字符串和枚举集合时遇到问题。我遵循了不同的建议,但似乎没有任何效果。我正在使用 PlayFramework 2.0 和提供的 Ebean 作为 ORM。

这是一个插图类:

package models;

import java.util.*;
import javax.persistence.*;
import play.db.ebean.Model;

@Entity
@Table(name = "foo")
public class Foo extends Model {

private static final long serialVersionUID = 1L;

private enum FooBar {
FOO, BAR;
}

@Id
public Long id;

@ElementCollection
@Enumerated(EnumType.STRING)
@CollectionTable(name = "bar_foobar",
joinColumns = @JoinColumn(name = "bar_id",
referencedColumnName = "id"))
@Column(name = "foobar")
public List<FooBar> fooBars;

@ElementCollection(targetClass = String.class)
@CollectionTable(name = "bar_strings",
joinColumns = @JoinColumn(name = "bar_id"))
@Column(name = "string", nullable = false)
public List<String> listOfStrings;

@Basic
public List<String> listOfStrings2;

// Attempt to circumvent the issue, but this gives a strange error
//public String[] arrayOfString;
}

应用程序启动时生成的 DDL 如下所示:

create table foo (
id bigint not null,
constraint pk_foo primary key (id))
;

如果注释正确,我希望看到表 bar_foobarbar_strings 都被创建。

如果使用 arrayOfString 变量,我会在应用程序启动时收到一条奇怪的错误消息(与随机实体相关,不一定是 Foo.class

PersistenceException: Error with [models.user.User] It has not been enhanced but it's superClass [class play.db.ebean.Model] is? (You are not allowed to mix enhancement in a single inheritance hierarchy) marker[play.db.ebean.Model] className[models.user.User]

我知道我可以将我的字符串和枚举包装在实体中,并使用@ManyToMany 关系,但想到它让我不寒而栗。 Play 2.0 或 Ebean(使用 v2.7.3)中是否存在错误?还有其他方法可以解决我的问题吗?

最佳答案

集合映射还没有在 Ebean 中实现。 EBEAN-378您所能做的就是自己实现映射。 @PrivateOwned 注释可用于 Foo 端,以确保字符串在从集合中删除后不会保留在数据库中。

关于java - 使用 Ebean 映射字符串和枚举集合(Play 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458084/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com