首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于不工作的getter的JPA @列注释

关于不工作的getter的JPA @列注释
EN

Stack Overflow用户
提问于 2016-01-12 03:48:59
回答 2查看 1.8K关注 0票数 0

这就是情况

代码语言:javascript
复制
@Transient
private Map<String, String> choices = null;

@Column(name = "choices", nullable = false)
public String getChoices() {
    return gson.toJson(choices);
}

当插入记录时,上面写着

java.sql.SQLException:字段“选择”没有默认值

我的调试SQL

代码语言:javascript
复制
 DEBUG SQL:109 - 
    insert 
    into
        question
        (description, id) 
    values
        (?, ?)

此处,选择字段被忽略。

数据库详细信息:

代码语言:javascript
复制
CREATE TABLE `question` (<br/>
  `id` varchar(50) COLLATE utf8_bin NOT NULL,<br/>
  `description` varchar(1000) COLLATE utf8_bin NOT NULL,<br/>
  `choices` text COLLATE utf8_bin NOT NULL,<br/>
  `answers` varchar(100) COLLATE utf8_bin NOT NULL<br/>
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;<br/>
<br/>
ALTER TABLE `question`<br/>
  ADD PRIMARY KEY (`id`);<br/>

有人能帮我解释一下为什么这样的字段会被忽略吗?谢谢。

更新实体类:

代码语言:javascript
复制
@Entity
@Table(name = "question")
public class Question {

@Id
private String id = null;

@Column(name = "description", nullable = false)
private String description = null;


@Transient
@Column(name = "choices", nullable = false)
private Map<String, String> choices = null;

public String getChoices() {
    return gson.toJson(choices);
}


@Transient
private Set<String> answers = null;

@Transient
private Gson gson = new GsonBuilder().create();

public Question() {
    this.id = UUID.randomUUID().toString();
}
...
}//End of class
EN

回答 2

Stack Overflow用户

发布于 2016-01-12 13:24:50

在create中,您已经标记了选项列null。choices text COLLATE utf8_bin NOT NULL,因此成为例外。

当您持久化问题实体类时,您没有为选择提供值,因此它们不包含在结果sql中。要么为选择提供值,要么在数据库中的列上删除null约束。

在JPA中注释属性javax.persistence.Transient将其标记为非持久性,并且不会包含在结果的SQL中。

票数 1
EN

Stack Overflow用户

发布于 2016-01-12 04:09:35

您可以简单地使用JPA注释@MapKey (注意,JPA注释与Hibernate注释不同,Hibernate @MapKey映射包含映射键的数据库列,而JPA注释将用作映射键的属性映射为).Use映射为:

代码语言:javascript
复制
@javax.persistence.MapKey(name = "choices ")
private Map<String, String> choices = new HashMap<String, String>(); 

public String getChoices() {
    return gson.toJson(choices);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34735271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档