【发布时间】:2021-03-01 15:17:13
【问题描述】:
所以这很令人沮丧,我开始测试我正在实施的会话系统,我只使用会话变量,没有更改我的数据库、模型或存储库中的任何内容,并且突然间 JPA 停止识别我的表.我收到以下错误:
“字段列表”中的未知列“t”
当我更改自定义查询以使用我得到的表时
未知表'**_dev.ticket'
这真的很奇怪。一切正常,它只是停止工作。我什至没有重新启动调试会话。
更多参考这里是我的这个函数的存储库代码:
@Query(nativeQuery = true, value = "select t.*, s.name as status, agent.name_surname as assigned, CAST(t.dt_created as VARCHAR(20)) as created from ticket t left join ticket_agent ta on t.id = ta.ticket_id and ta.active = true left join web_users agent on agent.id = ta.agent_id inner join ticket_status ts on t.id = ts.ticket_id and ts.isset inner join status s on ts.status_id = s.id where t.logged_by_id = :clientId and (s.name like :searchStr or t.subject like :searchStr or CAST(t.dt_created as VARCHAR(16)) like :searchStr or (case when agent.name_surname is null then 'Unassigned' else agent.name_surname end) like :searchStr) group by id")
Page<Ticket> findClientTickets(@Param("clientId") long agent, @Param("searchStr") String name, Pageable pageable);
这是我的模型:
@Entity(name = "ticket")
@Table(name = "ticket")
public class Ticket {
@Id
@GeneratedValue
@Column(nullable = false)
private long id;
@Column(nullable = false)
private String subject;
@Column(nullable = false, length = 512)
private String description;
@Column()
private String affected;
@OneToOne
@JoinColumn(name = "logged_by_id", nullable = false)
private WebUser loggedBy;
@Column(length = 1024)
private String resolution;
@Column(name = "dt_created", nullable = false)
private Date created;
@Column(name = "dt_resolved")
private Date Resolved;
@Column(name = "dt_closed")
private Date Closed;
@OneToOne
@JoinColumn()
private Thread thread;
@OneToMany
@JoinColumn(name = "ticket_id")
private List<TicketAgent> ticketAgent = new ArrayList<>();
@OneToMany
@JoinColumn(name = "ticket_id")
private List<TicketStatus> ticketStatus = new ArrayList<>();
@ManyToOne
@JoinColumn(nullable = false)
private ServiceType service;
@OneToMany
@JoinColumn(name = "ticket_id")
private List<TicketAttachment> ticketAttachment = new ArrayList<>();
@ManyToOne
@JoinColumn()
private ClientAddress address;
@ManyToOne
@JoinColumn()
private SLA sla;
@Column(name = "is_billable", nullable = false)
private boolean isBillable;
@Column(name = "is_onsite", nullable = false)
private boolean isOnsite;
@Column(nullable = false)
private int priority;
@OneToMany
@JoinColumn(name = "ticket_id")
private List<TicketNote> notes = new ArrayList<>();
public Ticket(){
}
public long getId(){
return this.id;
}
public String getSubject(){
return this.subject;
}
public String getDescription(){
return this.description;
}
public String getAffected(){
return this.affected;
}
public WebUser getLoggedBy(){
return this.loggedBy;
}
public String getResolution(){
return this.resolution;
}
public Date getResolved(){
return this.Resolved;
}
public Date getClosed(){
return this.Closed;
}
public Thread getThread(){
return this.thread;
}
public List<TicketAgent> getTicketAgent(){
return this.ticketAgent;
}
public List<TicketStatus> getTicketStatus(){
return this.ticketStatus;
}
public ServiceType getService(){
return this.service;
}
public List<TicketAttachment> getTicketAttachment(){
return this.ticketAttachment;
}
public ClientAddress getAddress(){
return this.address;
}
public SLA getSla(){
return this.sla;
}
public boolean isBillable(){
return this.isBillable;
}
public boolean isOnsite(){
return this.isOnsite;
}
public int getPriority(){
return this.priority;
}
public List<TicketNote> getNotes(){
return this.notes;
}
public void setSubject(String subject){
this.subject = subject;
}
public void setDescription(String description){
this.description = description;
}
public void setAffected(String affected){
this.affected = affected;
}
public void setLoggedBy(WebUser loggedBy){
this.loggedBy = loggedBy;
}
public void setResolution(String resolution){
this.resolution = resolution;
}
public void setResolved(Date Resolved){
this.Resolved = Resolved;
}
public void setClosed(Date Closed){
this.Closed = Closed;
}
public void setThread(Thread thread){
this.thread = thread;
}
public void setService(ServiceType service){
this.service = service;
}
public void setAddress(ClientAddress address){
this.address = address;
}
public void setSla(SLA sla){
this.sla = sla;
}
public void setIsBillable(boolean isBillable){
this.isBillable = isBillable;
}
public void setIsOnsite(boolean isOnsite){
this.isOnsite = isOnsite;
}
public void setPriority(int priority){
this.priority = priority;
}
public void setNotes(List<TicketNote> notes){
this.notes = notes;
}
//CODE_START
public void addAttachment(String filepath) {
TicketAttachment ticketAttachment = new TicketAttachment(this, filepath);
if (this.ticketAttachment == null) {
this.ticketAttachment = new ArrayList<>();
}
this.ticketAttachment.add(ticketAttachment);
}
public TicketStatus getStatus() {
long maxDate = 0;
TicketStatus mostRecentTicketStatus = null;
for (TicketStatus ticketStatus : this.ticketStatus) {
long time = ticketStatus.getCreated().getTime();
if (time > maxDate && ticketStatus.isSet()) {
maxDate = time;
mostRecentTicketStatus = ticketStatus;
}
}
return mostRecentTicketStatus;
}
public String getTicketClass() {
TicketStatus latestTicket = getStatus();
if (latestTicket == null) {
return "badge badge-warning";
}
Status status = latestTicket.getStatus();
int id = status.getColor();
switch (id) {
case 0:
return "badge badge-info";
case 1:
return "badge badge-danger";
case 2:
return "badge badge-primary";
case 3:
return "badge badge-success";
default:
return "badge badge-success";
}
}
public String getCreated() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd : HH:mm");
return simpleDateFormat.format(created);
}
public WebUser getAgent() {
for (TicketAgent agent : ticketAgent) {
if (agent.isActive())
return agent.getAgent();
}
return null;
}
public boolean hasAgent(){
return getAgent() != null;
}
public void create() {
if (this.created == null)
this.created = new Date();
}
}
谁能给我解释一下这是怎么发生的,也许是为什么? 该表确实存在于数据库中,如果我复制并粘贴原始 sql,我也会从数据库中获得有效结果(OUTSIDE SPRING BOOT 和 JPA)
我现在可能很愚蠢,但我找不到任何与我的问题非常相似的东西。 如果我更改了数据库、模型或存储库中的某些内容,我会理解的,但我没有。
它刚刚开始出现。
我做错了吗?请帮忙。
更新***
如果我以另一个用户身份登录,即使我使用完全相同的参数,一切都会再次神奇地工作...... 这必须是一个缓存问题。谁能告诉我如何清除所有缓存,包括tomcat。
【问题讨论】:
-
所以我有点弄清楚出了什么问题。 JPA 不再使用我的通配符了。我现在要尝试手动添加所有字段。
-
不,它不起作用。
标签: mysql spring-boot spring-data-jpa